關於正則表達式的“\b”

今天剛剛開始看正則表達式就遇到一個十分頭疼的問題,原文是這樣的:


“不幸的是,很多單詞裏包含hi這兩個連續的字符,比如him,history,high等等。用hi來查找的話,這裏邊的hi也會被找出來。如果要精確地查找hi這個單詞的話,我們應該使用\bhi\b。


\b是正則表達式規定的一個特殊代碼(好吧,某些人叫它元字符,metacharacter),代表着單詞的開頭或結尾,也就是單詞的分界處。雖然通常英文的單詞是由空格,標點符號或者換行來分隔的,但是\b並不匹配這些單詞分隔字符中的任何一個,它只匹配一個位置”


問題來了,什麼叫只匹配一個位置????


 


要知道是一個單詞的開頭,這個\b是去匹配開頭的分隔符還是匹配開頭的第一個字母??


 


從網上找到了這樣一句話:“如果需要更精確的說法,\b匹配這樣的位置:它的前一個字符和後一個字符不全是(一個是,一個不是或不存在)\w(匹配字母或數字或下劃線或漢字)”


 


這句話很隱晦的說出了是去匹配第一個字母,而不是去匹配分割符(我這說的匹配分隔符和上邊說的不去匹配任何一個分隔符並不矛盾,因爲我經過實驗已經進本猜出了一個單詞兩邊只要沒有數字、字母、漢字、下劃線就可以認爲是獨立單詞,我說的匹配分隔符是去判斷單詞前一個字符是不是在這四個之外,是的話就認爲是單詞開頭)


 


再加上下邊的兩個例子就可以很清晰的理解這句很隱晦的話。


引用Microsoft   VBScript   Regular   Expression  


Dim myReg As RegExp


Set myReg = New RegExp


 


myReg.Pattern = "a\b.*h.*"


Print myReg.Test("a,chia")


輸出的結果爲Ture 說明是匹配的a,而不是,


Dim myReg As RegExp


Set myReg = New RegExp


 


myReg.Pattern = "a.* \b h.*"


Print myReg.Test("a,chia")


輸出的結果爲flash 說明匹配的是h,而不是c


 


這兩個例子非常有助於理解\b的真實含義,希望對大家有幫助!


 


接下來就是我保證目前網絡中沒有的內容了!!!!還有兩點需要說明:


1、\b只能匹配字母、數字、漢字、下劃線


2、\b就近匹配,比如\bAB 匹配A,AB\b 匹配B;但如果只寫一個\b或者在兩個字母、數字、漢字、下劃線之間有\b時就在所有字符或者兩個字母、數字、漢字、下劃線之間所有字符去逐個匹配


相信如果你能看懂我上面所寫的東西,對於\b的使用算是沒有任何問題了!對正則表達式的學習有一個好的開始和基礎!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章