《正则表达式及其在TCL语言中的应用.ppt》由会员分享,可在线阅读,更多相关《正则表达式及其在TCL语言中的应用.ppt(16页珍藏版)》请在三一办公上搜索。
1、正则表达式及其在TCL语言中的应用,Feb,2010,title,正则表达式概念介绍正则表达式分析工具正则表达式基本语法正则表达式在TCL语言中的应用,正则表达式(regular expression)概念介绍,什么是正则表达式正则表达式就是记录文本规则的代码。正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。正则表达式是一种可以用于模式匹配和替换的强有力的工具构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符
2、集合、字符范围、字符间的选择或者所有这些组件的任意组合。正则表达式,能够为我们做什么呢?基于文本的编辑器和搜索工具中的一个重要部分。正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。,正则表达式入门示例,在一篇英文文档里查找hi?可以使用正则正则表达式hihim,history,high要精确地查找hi这个单词?应该使用bhib要查找:hi后面不远处跟着一个Lucy?应该用bhib.*bLucyb举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的
3、邮件地址的格式是否正确。,正则表达式工具,RegexTestTool.,正则表达式基本语法,基本语法正则表达式的形式一般如下:/expression/其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。,正则表达式-元字符,为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。,正则表达式-字符转义,如果想查找元字符本身的话,比如查找.,或者*,就出现了问题:没法指定它们,
4、因为它们会被解释成其它的意思。这时就必须使用来取消这些字符的特殊意义。因此,应该使用.和*。当然,要查找本身,也得用.示例:匹配匹配c:windowsc:windows,正则表达式-重复,正则表达式中所有指定重复的方式:示例:匹配Windows后面跟1个或更多数字Windowsd+匹配以13后面跟9个数字(中国的手机号)13d9匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)w+,正则表达式-字符类,想匹配没有预定义元字符的字符集比如元音字母(a,e,i,o,u)?只需要在中括号里列出它们就行了,像aeiou就匹配任何一个元音字母,.?!匹配标点符号(.或?或!)
5、。注意,不需要写成.?!。也可以轻松地指定一个字符范围,像0-9代表的含意与d就是完全一致的:一位数字,同理a-z0-9A-Z_也完全等同于w(如果只考虑英文的话)。示例:(?0d2)-?d8这个表达式可以匹配几种格式的电话号码,像,或,或等。,正则表达式-反义,有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:示例:S+匹配不包含空白符的字符串。+匹配用尖括号括起来的以a开头的字符串。,正则表达式-替换,替换是指:有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。示例:0d2-d8|0d3-d
6、7(0d2)-?d8|0d2-?d8d5-d4|d5这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。本例说明:使用替换时,顺序是很重要的。如果把它改成d5|d5-d4的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配替换时,将会从左到右地测试每个分枝条件,如果满足了某个分枝的话,就不会去管其它的替换条件了。Windows98|Windows2000|WindosXP本例说明:替换不仅仅能用于两种规则,也能用于更多种规则。,正则表达式-分组,想要重复一个字符串?用小括号来指定子表达式(也叫做分组),然后指定这个子表达式的重复次数。示例:一个
7、简单的IP地址匹配表达式(d1,3.)3d1,3存在问题:它也将匹配这种不可能存在的IP地址(IP地址中每个数字都不能大于255)。正则表达式中并不提供关于数学的任何功能只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:(20-4d|250-5|01?dd?).)3(20-4d|250-5|01?dd?)。,正则表达式-后向引用,使用小括号指定一个子表达式后,匹配这个子表达式的文本可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。后向引用用于重复搜索前面某个分组匹配的
8、文本。例如,1代表分组1匹配的文本。示例:b(w+)bs+1b可以用来匹配重复的单词,像go go,kitty kitty。首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(b(w+)b),然后是1个或几个空白符(s+,最后是前面匹配的那个单词(1)。,正则表达式-位置指定,接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们用于指定一个位置,就像b,$那样,因此它们也被称为零宽断言。(?=exp)零宽先行断言它匹配文本中的某些位置,这些位置的后面能匹配给定的后缀exp。比如bw+(?=ingb)匹配以ing结尾的单词的前面部分(除了ing以外的
9、部分)例如在查找Im singing while youre dancing.时,它会匹配sing和danc。(?=exp)零宽后行断言它匹配文本中的某些位置,这些位置的前面能给定的前缀匹配exp。比如(?=bre)w+b会匹配以re开头的单词的后半部分(除了re以外的部分)例如在查找reading a book时,它匹配ading。,正则表达式在TCL中的应用,RegexpMatch a regular expression against a stringSYNOPSIS regexp?switches?exp string?matchVar?subMatchVar subMatchVar.?示例:RegsubLsearchswitch,