Perl支持将ignore case和multiline mode这样的模式匹配修饰符(pattern-match
modifier)嵌入到模式里。这在使用动态模式(例如,从文件或者利用命令行读取的模式)的时候非常有用。
嵌入式模式匹配使用扩展模式句法,这种句法将一个问号作为第一个字符放在一对圆括号里。例如,要搜索字符串foo,同时忽略掉它的大小写就要使用:
$string =~ /(?i)foo/;
(使用)修饰符要比使用在模式最后放上一个/i修饰符的程序句法(假设该模式从文件读入)灵活得多。
下面四种模式匹配修饰符都是可嵌入的。(关于这些修饰符)完整讨论见Perl的文档。
- i-不区分大小写的模式匹配
- m -将字符串作为多行对待(“^”和“$”分别用于匹配行的开始和结束)
- s -将字符串作为单行对待(“.”能够匹配新的行)
- x -允许在模式里放入空白和注释
在一个或者多个模式匹配修饰符之前加上一个连字符(“-”)会关闭这些修饰符。
此外,你要知道修饰符会在一个封闭的空间内被本地化。例如,想想下面的模式:
/((?i)foo)bar/
它会匹配大写或者小写的foo,但是只会匹配小写的bar,因为大小写不敏感修饰符只应用到了封闭的块里。
Perl的嵌入式模式匹配修饰符,使得在配置文件里和利用命令行支持动态模式变得非常简单,而不需要利用复杂的句法来支持大小写不敏感比较这样的匹配选项。
责任编辑:李宁
欢迎评论或投稿
|