Perl 中的匹配运算符
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 前缀。
请注意,整个匹配表达式(即 =~ 或 !~ 左侧的表达式和匹配运算符)在标量上下文中返回 true(如果表达式匹配)。因此,语句:
$true = ($foo =~ m/foo/);
如果 $foo 与正则表达式匹配,则将 $true 设置为 1,否则如果匹配失败则设置为 0。在列表上下文中,匹配返回任何分组表达式的内容。例如,在从时间字符串中提取小时、分钟和秒时,我们可以使用:
my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);
Perl 中的匹配运算符修饰符
Perl 匹配运算符支持其自身的一组修饰符。/g 修饰符允许全局匹配。/i 修饰符将使匹配不区分大小写。以下是修饰符的完整列表
序号 | 修饰符和描述 |
---|---|
1 | i 使匹配不区分大小写。 |
2 | m 指定如果字符串包含换行符或回车符,则 ^ 和 $ 运算符将匹配换行符边界,而不是字符串边界。 |
3 | o 仅评估一次表达式。 |
4 | s 允许使用 . 匹配换行符。 |
5 | x 允许您在表达式中使用空格以提高清晰度。 |
6 | g 全局查找所有匹配项。 |
7 | cg 如果文件已存在则停止 |
广告