模式匹配修饰符
用/i进行大小写无关的匹配
use 5.010; print "Would you like to play a game?"; chomp($_=<STDIN>); if (/yes/i) { say "In that case,I recommend that you to bowling."; }
用/s匹配任意字符
默认情况下,点号(.)无法匹配换行符,如果希望点号能匹配这些换行符,那么/s修饰符可以完成这个任务。
use 5.010; $_="I saw Barney\ndown at the bowling alley\nwith Fred\nlast night."; if (/Barney.*Fred/s) { say "That string mentions Fred after Barney!"; }
用/x加入空白符
允许我们在模式里随意加上空白符,从而使它更易阅读,理解。
由于加上/x后模式里可以随意插入空白,所以原来表示空白和制表符本身的空白符就失去了意义,perl会直接忽略。
但我们总可以通过转义方式变通实现,\s(或者\s*,或是\s++),表示匹配空白符。
Perl 还会把模式中出现的注释当作空白符直接忽。
/ -? #一个可有可无的减号 [0-9]+ #小数点前必须出现一个或多个数字 \.? #一个可有可无的小数点 [0-9]* #小数点后面的数字,有没有都没关系 /x #字符串末尾
组合选项修饰符
如果需要对单次匹配使用多项修饰符,只需要把它们接在一起写在模式末尾(不用在意先后顺序):
if (m{ barney # 小伙子barney .* # 夹在中间不管什么字符 fred # 大嗓门的fred }six) { # 同时使用 /s /i /x print "That string menthions Fred after Barney!\n"; }
选择一种字符解释方式
Perl 5.14开始增加一些用于通知perl如何解释字符意义的修饰符。
总共有三种字符解释方式:ASCII Unicode locale 修饰符/a告诉Perl采取ASCII模式,而/u则表示采取Unicode方式,
最后/l表示遵从本地化语言的设定。 如果不提供这类修饰符,Perl会根据perlre文档描述的方式采取最为妥帖的行为。而通过使用
修饰符,你可以显示制定程序确切的行为。
use 5.014; /\w+/a #仅仅是 A-Z a-z 0-9 _ 这些字符 /\w+/u #任何Unicode当中定义为单词的字符 /\w+/l #类同于ASCII的版本,但单词字符的定义取决于本地化设定