perl学习日记7正则表达式

1.    正则表达式

1.1      什么是正则表达式?

我们将正则表达式看作一种由简单语言实现的程序,这种语言只有一个任务:查找某个字符串,返回匹配上(it matches)”或者不匹配(it doesnot match)”。这就是它完成的所有工作。

1.2      使用简单的模式

$_ =“yabba dabba doo”;

if(/abba/){

print “It matched!/n”;

}

所有在双引号中的转义字符在模式中均有效,因此你可以使用/coke/tsprite/来匹配11 个字符的字符串coke, tab(制表符)sprite

1.2.1.元字符

(.)是通配符,它可以匹配任何单个的字符,但不包括换行符(“/n”)

如果只希望点(.)匹配句号,可以使用反斜线。这条规则对Perl 正则表达式中所有元字符均有效:元字符前使用反斜线将使它变成普通的字符。如,模式/3/.14159/中的点(.)即不是通配符。

1.2.2.简单的量词

星号(*)表示匹配前一项0次或者多次。因此,/fred/t*barney/将匹配上fred barney

之间有任意个制表位(tab)的字符串。它可以匹配fred/tbarney,其间有一个tab;匹配fred/t/tbarney,其间有两个制表位;fred/t/t/tbarney其间有三个制表位;fredbarney,其间什么也没有。其间可以是任意个制表符,但不能是其它的字符。

 

因此.*将匹配任意字符任意多数,这就是说模式/fred.*barney/将匹配fred,barney 之间有任意多个任意字符(不含换行符)的字符串

 

(+)也是。加(+)的意思是可以匹配前面一项的一个或多个:/fred +barney/意思是fred barney 之间由空格分开,且只能是空格

 

问号(?),其含义是前面一个项出现一次,或者不出现。也就是说,前面这个项出现次或者次,此外不会有其它情况。因此,/barm-?bamm/只匹配:bamm-bamm bammbamm

 

1.2.3.模式中的分组

括号(())用来表示分组,模式/(fred)+/能匹配上像fredfredfred 这样的字符串,这更可能是你所希望的。那么模式/(fred)*/?它将匹配上像hello,world 这样的字符串

1.2.4.选择符

竖线(|),在这种用法中通常被读作或(or,意思是匹配左边的或者右边的。因此,/fred|barney|betty/将匹配出现过fred,或者barney,或者betty 的字符串。

模式/fred (and|or) barney/能匹配如下两种字符串:fred and barney, fred or barney

1.2.5.字符类

方括号[]中的一列字符,可以匹配上括号内出现的任意单个字符。

例如,字符类[abcwxyz]可以匹配上括号内七个字母中的任意一个。为了方便,我们可以使用连字号(-)来表示某个范围的字母,因此上例也可以写做[a-cw-z]。上面例子省略的字符不多,但像[a-zA-Z]将非常方便,你可以使用和双引号相同的字符简写方法,例如类[/000-/177]可以匹配上任意的七比特的ASCII 字符

$_ = “The HAL-9000 requires authorization to continue.”;

if(/HAL-[0-9]+/){

print “The string mentions some model of HAL computer./n”;

}

[^def]将匹配上这三个字符中之外的任意单个字符。[^n/-z]将匹配上n-之外的任何字符。

1.2.6.字符类的简写

任何数字的类,[0-9],可以被简写为:/d。刚才那个例子可以被写作/HAL-/d+/

/w 被称作“word’字符:[A-Za-z0-9_]

模式/fred /w+ barney/将匹配fred,空格,一个“单词(word)”,然后是空格和barney

/s 对于匹配空白(whitespace)将非常方便。它等价于[/f/t/n/r ],其含个空白字符:格式符(form-feed);制表符(tab),换行符,回车,以及空格符

1.2.7.简写形式的补集

你可以使用[^/d][^/w][^/s],其含义分别是,非数字的字符,非word(记住我们对word 的定义)的字符,和非空白的字符。也可以使用它们对应的大写形式:/D/W/S 来完成。

 

另一个类字符[/d/D],它的意思是任何数字,和任何非数字,则意指任何字符。甚至包括换行符,而点(.)匹配除换行符以外的任何字符。

[^/d/D]则完全没用,因为它匹配既非数字也非非数字的字符,那什么也不是。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值