Perl正则表达式

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)。