2011-02-11 wcdj
(1) 什么是正则表达式? (2) 使用简易模式 (3) 关于元字符 (4) 简易量词 (1) 什么是正则表达式? 正则表达式,在Perl中常常叫做 —— 模式,是一个匹配(或不匹配)某字符串的 —— 模版。 正则表达式是一种小程序,它们说简单的方言。这个程序的任务很简单:查看一个字符串,然后决定匹配或不匹配 —— 这就是它生活的全部。 注意:不要把正则表达式和shell的文件名通配(glob)混为一谈。文件名通配使用了许多与正则表达式相同的字符,但是这些字符在使用方式上完全不同。 (2) 使用简易模式 若模式匹配的对象是$_的内容,只要把模式写在一对正斜线 (/)中就可以了。 表达式/wcdj/会在$_中寻找这4个字符组成的串,如果找到就返回真。(可能会找到不止一个字符串,但只要曾经找到过,匹配结果就是真,否则为假) 注意:所有在双引号圈引的字符串中能使用的技巧(尤其是反斜线转义),都可以在模式串里使用。例如,/wcdj/tgerry/ 这个模式会匹配wcdj、一个制表符和gerry这10个字符。
#! /usr/bin/perl $_ = "wwcdj bwcdja abc";# 查找wcdj if (/wcdj/) { print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "cdj bcdja abc";# 查找wcdj if (/wcdj/) { print "It matched!/n"; } else { print "not matched!/n";# 输出此句 }
(3) 关于元字符 元字符 —— 特殊的字符,特殊的含义。 点号(.)—— 任何单字符的通配符(但是换行符“/n”除外) 注意: [1] 在任何元字符前面加上反斜线,就会使它失去元字符的特殊作用。 [2] 反斜线也是元字符。如果要得到反斜线,请用两个反斜线表示。
$_ = "wcdj bcdja abc"; if (/w.dj/) {# 元字符,点号,查找wXdj,X表示任意单字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "w.dj bcdja abc"; if (/w/.dj/) {# 查找w.dj print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "w//dj bcdja abc"; if (/w//dj/) {# 查找w/dj print "It matched!/n";# 输出此句 } else { print "not matched!/n"; }
(4) 简易量词 常常需要在某个模式中重复某些东西。 星号(*)—— 匹配前面的内容零次或多次(>=0次)。“.*”称为“捡破烂模式”,通吃所有的字符串。 加号(+)—— 匹配前一个条目一次以上(>=1次)。 问号(?)—— 前一个条目可有可无(1或0次)。 注意:因为这三个量词指定了前一个条目重复出现的次数,所以它们都必须接在某个东西之后。
print "[1] 星号/n"; $_ = "w1234d"; if (/w*dj/) {# *表示>=0个w字符 print "It matched!/n"; } else { print "not matched!/n";# 输出此句 } $_ = "w1234dj"; if (/w*dj/) {# *表示>=0个w字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "wdj bcdja abc"; if (/w*dj/) {# *表示>=0个w字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "wwwwwwwwwwwwdj bcdja abc"; if (/w*dj/) {# *表示>=0个w字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } print "[2] 加号/n"; $_ = "dj bcdja abc"; if (/w+dj/) {# +表示>=1个w字符 print "It matched!/n"; } else { print "not matched!/n";# 输出此句 } $_ = "wdj bcdja abc"; if (/w+dj/) {# +表示>=1个w字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "wwdj bcdja abc"; if (/w+dj/) {# +表示>=1个w字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "wwwwwwwwwwwdj bcdja abc"; if (/w+dj/) {# +表示>=1个w字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } print "[3] 问号/n"; $_ = "wdj bcdja abc"; if (/w?dj/) {# ?表示1个或0个w字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "wwdj bcdja abc"; if (/w?dj/) {# ?表示1个或0个w字符 print "It matched!/n";# 输出此句 } else { print "not matched!/n"; } $_ = "wwwwwd"; if (/w?dj/) {# ?表示1个或0个w字符 print "It matched!/n"; } else { print "not matched!/n";# 输出此句 }