今天剛剛開始看正則表達式就遇到一個十分頭疼的問題,原文是這樣的:
“不幸的是,很多單詞里包含hi這兩個連續的字符,比如him,history,high,hi/\等等。用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")
輸出的結果為True 說明是匹配的a,而不是,
Dim myReg As RegExp
Set myReg = New RegExp
myReg.Pattern = "a.* \b h.*"
Print myReg.Test("a,chia")
輸出的結果為False 說明匹配的是h,而不是c
這兩個例子非常有助於理解\b的真實含義,希望對大家有幫助!
接下來就是我保證目前網絡中沒有的內容了!!!!還有兩點需要說明:
1、\b只能匹配字母、數字、漢字、下划線
2、\b就近匹配,比如\bAB 匹配A,AB\b 匹配B;但如果只寫一個\b或者在兩個字母、數字、漢字、下划線之間有\b時就在所有字符或者兩個字母、數字、漢字、下划線之間所有字符去逐個匹配
相信如果你能看懂我上面所寫的東西,對於\b的使用算是沒有任何問題了!對正則表達式的學習有一個好的開始和基礎!