正則表達(dá)式中, :p(2)
和 :c(2)
的區(qū)別
:p
中的 p 是單詞 「position」 的首字母。:c
中的 c 是單詞 「continue」 的首字母。它們的長形式分別是 :pos
和 :continue
。
- Continue
:continue
或短形式的 :c
副詞接受一個參數(shù)。這個參數(shù)就是正則表達(dá)式開始搜索的起始位置。默認(rèn)地,正則表達(dá)式從字符串的開頭開始搜素,但是 :c
重寫了起始位置。如果沒有為 :c
指定位置,那么位置默認(rèn)為 0,除非設(shè)置了 $/
,在這種情況下,位置默認(rèn)為 $/.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 參數(shù)會讓匹配繼續(xù)進(jìn)行,讓正則引擎移動到下一個位置, 是字符 e
, 再進(jìn)行匹配,匹配成功。
第二個,從位置 3 處開始匹配,模式 e.+
在這個位置不匹配,匹配失敗。