Perl 6 - :p(2) 和 :c(2) 的区别

正则表达式中, :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.+ 在这个位置不匹配,匹配失败。

你可能感兴趣的:(Perl 6 - :p(2) 和 :c(2) 的区别)