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