在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
perl是最好的文本处理语言,而正则表达式是perl文本处理的核心。 一个正则表达式就是一种方法,这种方法能够描述一组字符串,但不用列出所有的字符串。 一、正则表达式的几种用法: 1:确定一个字符串中是否匹配某个模式,在一个布尔环境中它们返回真或假。 if(/Windows 95/) {print "Time to upgrade?\n"} 2:如果你能将一个模式在字符串中定位,你就可以用别的东西来替换它。 s/windows/linux/;将windows替换成linux。 split中,正则表达式定义了各个数据与之间定界的分隔符。 ($good,$bad,$ugly)=split(/,/,"vi,emacs,teco"); 正则表达式最简单的应用就是匹配一个文字表达式。 while($line=<FILE>){ if($line=~/http:/){ print $line; } } 在这里,=~符号(模式绑定操作符)告诉perl在$line中寻找匹配正则表达式"http:",如果发现该表 达 式,返回真。 更简洁的写法: while(<FILE>) {print if /http:/;} 更方便的正则表达式: /[a-zA-Z]+:/这里用方括弧来定义了一个字符表,a-z和A-Z代表所有的字母字符。+是一个特殊字符,表示匹配“+”前面内容一次或多次。提示:反斜杠不是正则表达式的一部分,但是它是模式匹配操作符的一部分。 二、字母字符: 空白 \s [\t\n\r\f] 词 \w [a-zA-Z_0-9] 数字 \d [0-9] 这些简写只匹配单个字符,可以用\w+来匹配一个词。这些通配符大写方式和小写方式代表的意思刚好相反,\D表示左右非数字的字符。 特别的字符类型: 用“.”来表示,将匹配所以的字符,例如,/a./将会匹配所有含有一个“a”并且a不是最后一个字符的字符串。"at","a!" "oasis" 三、量词: \w+可以用来匹配多个“文本”类型,这里+就是量词。所以的量词都放在需要多重匹配的东西后面。 最简单的量词就是指定最小和最多的匹配次数。可以将两个数字用花括弧括起来,并用逗号分开。 例如:\d{7,11}将匹配最少7位数字,最多11位数字。\d{7,}最大匹配会有无限次数。\d{7}将匹配开始的前七位。 +,代表{1,},意思为最少一次 *,表示{0,}表示零次或多次 ?,表示{0,1},表示零次或一次 缺省时量词作用在它前面的单个字符上,因此/bam{2}/将匹配“bamm”而不是“bambam”,如果你要对多于一个字符使用量词,你需要使用圆括弧,因此为了匹配“bambam”,需要使用/(bam){2}/ 特殊符号:\b匹配单词边界,就是位于单词字符(\w)和非单词字符(\W)之间的零宽度的地方。(字符串的开始和结尾也被认为是非单词字符。)例如:/\bFred\b/将会匹配"The great Fred"和"Fred the great"中的Fred,但不能匹配"Fredrick the greart",因为在"d"后面没有跟着非单词字符。 ^ 表示字符串开始和结尾的锚点,^如果放在模式中的第一个字符,将匹配字符串的开始。/^Fred/将匹配"Fred the great"中的Fred,但不配"the great Fred".相反的,/Fred^/两者都不配。 四、反引用: 圆括弧来为量词包围一些字符,同样,可以用圆括弧来记住匹配到的东西。/(\d+)/将匹配到的数字保存到一个特殊变量中。在同一个正则表达式中,可以使用反斜杠加上一个整数。数字代表从左边开始计数左圆括弧的个数。要匹配<B>Bold</B>,可以用/<(.*?)>.*?</\1>.两个部分都匹配到同样的字符串"B"。不在同一个正则表达式,可以使用¥后边跟一个整数。/(\S+)\s+(\S)/$2 $1/,实现了将一个字符串的两个词互相调换。 五、列表处理: 标量环境(处理单个的事物),列表环境(处理复数个事物) 一些操作符产生列表(如keys),而一些操作符使用列表(如print),还有其它一些操作符将列表串进其它的列表(如sort)。 |
请发表评论