正则表达式中, :p(2)
和 :c(2)
的区别
:p
中的 p 是单词 「position」 的首字母。:c
中的 c 是单词 「continue」 的首字母。它们的长形式分别是 :pos
和 :continue
。
- Continue
:continue
或短形式的 :c
副词接受一个参数。这个参数就是正则表达式开始搜索的起始位置。默认地,正则表达式从字符串的开头开始搜素,但是 :c
重写了起始位置。如果没有为 :c
指定位置,那么位置默认为 0,除非设置了 $/
,在这种情况下,位置默认为 $/.to
。
- Pos
如果指定了匹配的起始位置,而模式在这个位置不匹配,那么匹配失败。如果指定了 :continue
,而模式在这个位置不匹配,那么它会尝试从那个位置之后的位置匹配。:continue
很像 Perl 5 的 /gc
,而 :pos
很像 Perl 5 的 /gc
并在模式的开头加上一个 \G
断言。
例子:
say "abcdefg" ~~ m:c(3)/e.+/; # OUTPUT«「efg」
»
say "abcdefg" ~~ m:p(3)/e.+/; # OUTPUT«False
»
第一个,从位置 3 处开始匹配,是字符 d,模式 e.+
在这个位置不匹配,而 c 参数会让匹配继续进行,让正则引擎移动到下一个位置, 是字符 e
, 再进行匹配,匹配成功。
第二个,从位置 3 处开始匹配,模式 e.+
在这个位置不匹配,匹配失败。