如何解决Perl中的qr /和m /有什么区别?
来自Perldoc:
qr/STRING/msixpodualn
该运算符将其STRING引为常规字符串(并可能对其进行编译) 表达。 对STRING进行插值的方式与PATTERN在 m / PATTERN / 。
m/PATTERN/msixpodualngc
/PATTERN/msixpodualngc
在字符串中搜索模式匹配,并在标量上下文中返回 如果成功,则返回true;如果失败,则返回false。如果没有通过指定字符串 =〜或!〜运算符,将搜索$ _字符串。 (字符串 用=〜指定的值不必是左值-可能是 表达式求值,但请记住=〜绑定得很紧。)请参见 也是。
选项如上文qr //中所述
我敢肯定我遗漏了一些明显的东西,但是我对这些选项有何不同完全不清楚,它们基本上是同义词。您什么时候使用qr//
代替m//
,反之亦然?
解决方法
m//
运算符用于匹配,而qr//
生成一个模式(作为字符串),您可以将其粘贴在变量中并存储以备后用。这是带引号的正则表达式模式。
以这种方式进行预编译对于优化运行时成本非常有用,例如如果您要在具有数百万次迭代的循环中使用固定模式,或者要在函数调用之间传递模式或在调度表中使用它们。
# match now
if ( $foo =~ m/pattern/ ) { ... }
# compile and use later
my $pattern = qr/pattern/i;
print $pattern; # (?^ui:pattern)
if ($foo =~ m/$pattern/) { ... }
字符串的结构(在此示例中为(?^ui:pattern)
)在in perlre中进行了说明。基本上(?:)
创建一个带有内置标志的子模式,而^
指出不存在哪些标志。您也可以在其他模式中使用此功能,例如,为模式的某些部分打开和关闭不区分大小写。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。