在PHP中,要實(shí)現(xiàn)零寬斷言,可以使用(?=...)
(正向前瞻)和(?!...)
(負(fù)向前瞻)這兩種斷言。它們?cè)试S你在不消耗字符的情況下進(jìn)行模式匹配。
(?=...)
正向前瞻斷言檢查其后的內(nèi)容是否符合括號(hào)內(nèi)的表達(dá)式,但不會(huì)消耗匹配的字符。例如,要匹配所有緊跟在數(shù)字后面的元音字母,可以使用以下正則表達(dá)式:
$pattern = '/\d(?=[aeiou])/i';
preg_match_all($pattern, '1bc', $matches); // $matches[0] will contain 'b' and 'c'
(?!...)
負(fù)向前瞻斷言檢查其后的內(nèi)容是否符合括號(hào)內(nèi)的表達(dá)式,但不會(huì)消耗匹配的字符。例如,要匹配所有不以數(shù)字開(kāi)頭的單詞,可以使用以下正則表達(dá)式:
$pattern = '/\b(?!\d)/i';
preg_match_all($pattern, 'hello world', $matches); // $matches[0] will contain 'hello world'
請(qǐng)注意,零寬斷言在某些情況下可能不會(huì)按預(yù)期工作,因?yàn)樗鼈儾粫?huì)消耗字符。這意味著正則表達(dá)式引擎會(huì)在遇到第一個(gè)滿(mǎn)足斷言的位置時(shí)停止匹配。因此,在使用零寬斷言時(shí),請(qǐng)確保正確設(shè)置正則表達(dá)式。