\b用來設定單字界限。配對單字(由字母數字或底線組成的)的開始或結束(匹配開始時,單字之前不能有\w;匹配結束時,單字之後不能有\w)。寫在表達式某個字元或字串之前,表示此字元或字串之前不能有\w對應的字元;寫在字元後面,表示此字元之後不能有\w對應的字元。 所以\b可以只有一個放在字元前面或後面,也可以有2個(表示字元前後都不能有\w對應的字元)。
先看正確的情況
圖1
註:1.如果\b描述的不是由字母數字或底線組成的單詞,則表達式定義錯誤,永遠不會有字串與其匹配。如圖2:
圖2
#2.目標字串中匹配的只是單獨的單字,不包括前後的間隔(如空格,\W等),圖1中匹配的「Russell」字元兩邊的空格,沒有計入(測試工具顯示沒有藍色背景填充)。
目的:符合獨立的單字或字串的部分,業務規則是尋找所有有單字「Russell」獨立出現的地方。如表達式\bRussell\b 則Russell123abc不匹配,因為Russell後面不應該跟字母或數字或底線,Russell 123abc,Russell@123abc都匹配。
3.特殊情況。自相矛盾的表達式定義。
因為:根據\b的定義,\b只是確保下列情況,目標字串才能匹配:\b前後的字元不能有\w,所以非\w(或說\W)的字元在\b前後會匹配上。注意,這裡要求要想匹配上一定是非\w的字符,所以正則的潛台詞已經說了:匹配上\b的字符身邊一定就是非\w字符了,所以要在\b表達式之後再加上非\w的其他表達式,才有可能讓目標字串匹配上。
所以類似這樣的正規則永遠不會被配對:\bhi\bnihao 目標字串hinihao hi nihao hi*nihao hi @#$nihao hi*nihao hi @#$nihao 時 中。 。 。
因為\bhi\b要求了hi前後不能有字母數字或下劃線的字符,並且hi之後緊接著要是nihao字符串。所以hi前後這能是空格! @#¥%等特殊字符,而表達式中定義緊接著hi之後的是nihao,所以永遠都不會有目標字串和此正則匹配。
辦法:在定義正規則時,就把這個非\w用正規考慮進去(寫入運算式),修正正規為\bhi\b \W+nihao 則有
hinihao
hi nihao
hi@nihao
hi!@#$ nihao
後三個都符合
#以上是關於正規表示式中\b的認識的詳細內容。更多資訊請關注PHP中文網其他相關文章!