首頁  >  文章  >  後端開發  >  PHP 正規表示式中何時出現單字邊界?

PHP 正規表示式中何時出現單字邊界?

Linda Hamilton
Linda Hamilton原創
2024-10-21 07:27:02157瀏覽

When Do Word Boundaries Occur in PHP Regular Expressions?

PHP 正規表示式中的單字邊界語義

在PHP 中,單字邊界是使用b 元字元實現的,它匹配單字字元之間的轉換( w) 和非單字字元(W)。但是,其行為可能存在細微差別,如您提供的測試案例所示。

意外的單字邊界

在您的測試案例中,您期望以下結果:

preg_match("/(^|\b)@nimal/i", "something@nimal", $match); // false
preg_match("/(^|\b)@nimal/i", "something!@nimal", $match); // true

但實際結果卻相反:

preg_match("/(^|\b)@nimal/i", "something@nimal", $match); // true
preg_match("/(^|\b)@nimal/i", "something!@nimal", $match); // false

出現此異常是因為b 元字元在單字字元(w) 到非單字字元(W) 的轉換處匹配。在第一種情況“something@nimal”中,單字邊界出現在“g”(單字字元)和“@”(非單字字元)之間,從而導致匹配。然而,在第二種情況「something!@nimal」中,「!」之間沒有單字邊界。和“@”,因為兩者都是非單字字元。

匹配單字開頭

要匹配以特定序列開頭的單詞,您需要確保有目標序列之前的單字邊界 (b)。例如,要匹配以“@nimal”開頭的單詞,您可以使用以下正則表達式:

preg_match("/(\b)@nimal/i", "something@nimal", $match); // true
preg_match("/(\b)@nimal/i", "something!@nimal", $match); // false

在此正則表達式中,單詞邊界(b) 將確保存在從單詞字符的轉換“@nimal”之前的非單字字元。這將匹配以“@nimal”開頭的單詞,但不匹配中間有“@nimal”的單詞,例如“ducat”。

以上是PHP 正規表示式中何時出現單字邊界?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn