正则表达式及其在TCL语言中的应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功