Perl中的Match运算符

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中的匹配运算符修饰符

Perl匹配运算符支持其自己的修饰符集。/ g修饰符允许全局匹配。/ i修饰符将使区分大小写不区分大小写。这是修饰符的完整列表

序号修饰符和说明
1i
使比赛区分大小写。
2m
指定如果字符串包含换行符或回车符,则^和$运算符现在将匹配换行符边界,而不是字符串边界。
3o
仅对表达式求值一次。
4s
允许使用。匹配换行符。
5x
允许您在表达式中使用空格以保持清晰度。
6g
全局查找所有匹配项。
7cg
如果文件已经存在则停止