perl - 字符串比较和正则表达式

时间:2015-02-15 18:33:07

标签: regex string perl

这两条线有什么区别?

if ($data =~ m/$str/) {
       ####  ^--- HERE
    print "OK"; 
}

if ($data =~ /$str/) {
    print "OK"; 
}

完全不同只是一个' m'

1 个答案:

答案 0 :(得分:4)

m表示您即将使用匹配的正则表达式,而不是使用音译或其他可与/一起使用的运算符替换。如果您使用/作为分隔符,那么m是可选的。独立/假定为m。如果您想使用其他符号作为m等正则表达式的引号,则$str =~ m|$regexp|是必需的。如果regexp里面包含大量/,那么这对于编写更易读的代码很有用,所以你不必引用它们。

此外,可以使用m指定的其他一些分隔符将以不同方式处理引用的字符串。 http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators

  

使用m,您可以使用任何一对非空格(ASCII)字符   作为分隔符。这对于匹配路径名特别有用   含有“/”,以避免LTS(倾斜牙签综合征)。如果“?”是   分隔符,然后是仅匹配一次的规则,如下所述   M'模式?下面。如果“'”(单引号)是分隔符,则不   在PATTERN上执行插值。使用角色时   在标识符中有效,在m之后需要空格。