Perl中的匹配运算符m //用于将字符串或语句匹配到正则表达式。例如,要将字符序列“ foo”与标量$bar匹配,可以使用如下语句:
#!/usr/bin/perl $bar = "This is foo and again foo"; if ($bar =~ /foo/) { print "First time is matching\n"; } else { print "First time is not matching\n"; } $bar = "foo"; if ($bar =~ /foo/) { print "Second time is matching\n"; } else { print "Second time is not matching\n"; }
当执行上述程序时,将产生以下结果-
First time is matching Second time is matching
m //实际上与q //运算符系列的工作方式相同。您可以使用自然匹配字符的任意组合作为表达式的定界符。例如,m {},m()
和m> <均有效。所以上面的例子可以重写如下:
#!/usr/bin/perl $bar = "This is foo and again foo"; if ($bar =~ m[foo]) { print "First time is matching\n"; } else { print "First time is not matching\n"; } $bar = "foo"; if ($bar =~ m{foo}) { print "Second time is matching\n"; } else { print "Second time is not matching\n"; }
如果定界符为正斜杠,则可以从m //中省略m,但是对于所有其他定界符,必须使用m前缀。
请注意,如果整个表达式匹配,则整个match表达式(即=〜或!〜左侧的表达式以及match运算符)将返回true(在标量上下文中)。因此,声明-
$true = ($foo =~ m/foo/);
如果$foo匹配正则表达式,则将$true设置为1;如果匹配失败,则将$true设置为0。在列表上下文中,匹配返回任何分组表达式的内容。例如,从时间字符串中提取小时,分钟和秒时,我们可以使用-
my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);
Perl匹配运算符支持其自己的修饰符集。/ g修饰符允许全局匹配。/ i修饰符将使区分大小写不区分大小写。这是修饰符的完整列表
序号 | 修饰符和说明 |
---|---|
1 | i 使比赛区分大小写。 |
2 | m 指定如果字符串包含换行符或回车符,则^和$运算符现在将匹配换行符边界,而不是字符串边界。 |
3 | o 仅对表达式求值一次。 |
4 | s 允许使用。匹配换行符。 |
5 | x 允许您在表达式中使用空格以保持清晰度。 |
6 | g 全局查找所有匹配项。 |
7 | cg 如果文件已经存在则停止 |