先看正確的情況
圖1
注:1.如果\b描述的不是由字母數(shù)字或下劃線組成的單詞,則表達(dá)式定義錯誤,永遠(yuǎn)不會有字符串與其匹配。如圖2:
圖2
2.目標(biāo)字符串中匹配的只是單獨的單詞,不包括前后的間隔(如空格,\W等),圖1中匹配的“Russell”字符兩邊的空格,沒有計入(測試工具顯示沒有藍(lán)色背景填充)。
目的:匹配的單詞或字符串的部分,業(yè)務(wù)規(guī)則是查找所有有單詞“Russell”出現(xiàn)的地方。如表達(dá)式\bRussell\b 則Russell123abc不匹配,因為Russell后不應(yīng)該跟字母或數(shù)字或下劃線,Russell 123abc,Russell@123abc都匹配。
3.特殊情況。自相矛盾的表達(dá)式定義。
\b只是用來限定由字母數(shù)字或下劃線構(gòu)成的單詞,
如果表達(dá)式\b之后還有其他表達(dá)式,則表達(dá)式\b之后的表達(dá)式一定不能是\w或者不能是\w中的內(nèi)容,因為
例子,表達(dá)式\bhi\bnihao,意思是單詞hi前后不能有\(zhòng)w的內(nèi)容,并且要求目標(biāo)字符串有hi,并且hi之后緊跟"nihao"字符。即這個表達(dá)式的定義就是自相矛盾的。
因為:根據(jù)\b的定義,\b只是確保下列情況,目標(biāo)字符串才能匹配:\b前后的字符不能有\(zhòng)w,所以非\w(或者說\W)的字符在\b前后會匹配上。注意,這里要求要想匹配上一定是非\w的字符,所以正則的潛臺詞已經(jīng)說了:匹配上\b的字符身邊一定就是非\w字符了,所以要在\b表達(dá)式之后再加上非\w的其他表達(dá)式,才有可能讓目標(biāo)字符串匹配上。
所以類似這樣的正則永遠(yuǎn)不會被匹配:\bhi\bnihao 目標(biāo)字符串hinihao hi nihao hi*nihao hi @#$nihao 。。
因為\bhi\b要求了hi前后不能有字母數(shù)字或下劃線的字符,并且hi之后緊接著要是nihao字符串。所以hi前后這能是空格!@#¥%等特殊字符,而表達(dá)式中定義緊接著hi之后的是nihao,所以永遠(yuǎn)都不會有目標(biāo)字符串和此正則匹配。
辦法:在定義正則時,就把這個非\w用正則考慮進(jìn)去(寫進(jìn)表達(dá)式中),修改正則為\bhi\b\W+nihao 則有
hinihao
hi nihao
hi@nihao
hi!@#$ nihao
后三個都匹配
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com