perl6 – :ex和:带有Perl 6命名捕获的ov副词
我不完全明白,为什么结果会有所不同.是:ov仅适用于< left>,所以找到最长的匹配它不会做任何其他事情?
my regex left { a | ab } my regex right { bc | c } "abc" ~~ m:ex/<left><right> {put $<left>,'|',$<right>}/; # 'ab|c' and 'a|bc' say '---'; "abc" ~~ m:ov/<left><right> {put $<left>,$<right>}/; # only 'ab|c' 解决方法
副词的类型
重要的是要了解有两种不同类型的正则表达式副词: >那些微调你的正则表达式代码编译的那些(例如:sigspace /:s,:ignorecase /:i,…).这些也可以写在正则表达式中,并且只适用于正则表达式中其余的词法范围. 匹配副词 以下是第二类相关副词的作用: > m:ex /…/在每个可能的起始位置找到所有可能的匹配. (在每种情况下,一旦它找到了在任何给定位置找到的正则表达式,正则表达式引擎就会继续运行,这就是为什么即使将print语句放在正则表达式中也不会看到额外的输出.) 你的榜样 在您的情况下,只有两种可能的匹配:ab | c和a | bc.两者都从输入字符串中的相同位置开始,即在位置0处.所以只有m:ex /…/会找到它们 – 所有其他变体只能找到其中一个,然后继续前进. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |