m和rx之间有什么区别?

时间:2018-05-01 06:53:31

标签: regex syntax perl6

他们似乎是used interchangeably in the documentation。即使是在意图中,有什么不同吗?

1 个答案:

答案 0 :(得分:10)

作为链接到州的文档,

m/abc/;         # a regex that is immediately matched against $_
rx/abc/;        # a Regex object
/abc/;          # a Regex object
     

[...] m/ // /运营商之间差异的示例:

my $match;
$_ = "abc";
$match = m/.+/; say $match; say $match.^name; # OUTPUT: «「abc」␤Match␤» 
$match =  /.+/; say $match; say $match.^name; # OUTPUT: «/.+/␤Regex␤»

因此/.../会返回一个Regex对象,该对象可作为值传递,并可用于稍后和多次匹配,m/.../会返回Match已立即执行比赛的对象。当您打印Match对象时,您将获得匹配的结果,并且当您打印Regex对象时,您将获得正则表达式的文本表示。在Perl 6中使用m/.../可以访问隐式Match对象$/

  

匹配结果存储在$/变量中,也会从匹配中返回。如果匹配成功,则结果为Match;否则为Nil

这种区别与Python的re.compilere.match/re.search相当,Perl 5中存在类似的区别,您可以使用qr/.../与{{m/.../存储和重复使用正则表达式1}}和/.../用于直接匹配。正如@raiph指出的那样,并非所有m/...//.../都会导致直接匹配。相反,Perl 5 precompiles literal (static) regexes即使没有明确要求它。 (据推测,Perl 6也会执行此优化。)