揭開PHP 中正規表示式單字邊界的神秘面紗
當使用正規表示式來定位文字中的特定單字時,通常需要強加指定單字是否標記單字單元的開頭或結尾的約束。但是,當嘗試使用字邊界實現此操作時,可能會出現一些意外行為。
考慮以下正規表示式:
preg_match("/(^|\b)@nimal/i", "something@nimal", $match);
我們預期匹配會失敗,因為分組表達式將消耗「@」符號,讓「nimal」與「@nimal」匹配,而它不應該。然而,在這個例子中,分組表達式匹配一個空字串,允許“@nimal”匹配,這意味著“@”被視為單字的一部分。
要解開這個謎團,理解這一點至關重要PHP 中的單字邊界是如何決定的。單字邊界(b)表示單字字元(w)和非單字字元(W)之間的過渡點。要匹配必須從單字開頭開始的單詞,附加單字字元必須位於預期單字之前。
因此,在第一個範例中:
something@nimal ^^
匹配成功,因為有字母「g」和「@」符號之間的單字邊界。然而,在第二種情況下:
something!@nimal ^^
匹配失敗,因為「!」和「@」符號都是非單字字符,不創建單字邊界。為了解決這個問題,您可以使用以下正規表示式:
preg_match("/g\b!@\bn/i", "something!@nimal", $match);
此表達式需要“@”之前有一個單字字符,“@”之後有一個單字字符,確保僅在“@”出現時配對一言以蔽之。
以上是PHP 中的單字邊界如何處理非單字字元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!