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

Period One:

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

“不幸的是,很多單詞裏包含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的使用算是沒有任何問題了!對正則表達式的學習有一個好的開始和基礎!

Period Two:

一些符號在表達式中代表抽象的特殊意義:

表達式

作用

^

與字符串開始的地方匹配,不匹配任何字符

$

與字符串結束的地方匹配,不匹配任何字符

\b

匹配一個單詞邊界,也就是單詞和空格之間的位置,不匹配任何字符

    進一步的文字說明仍然比較抽象,因此,舉例幫助大家理解。

    點擊測試 舉例1:表達式 "^aaa" 在匹配 "xxx aaa xxx" 時,匹配結果是:失敗。因爲 "^" 要求與字符串開始的地方匹配,因此,只有當 "aaa" 位於字符串的開頭的時候,"^aaa" 才能匹配,點擊測試 比如:"aaa xxx xxx"

    點擊測試 舉例2:表達式 "aaa$" 在匹配 "xxx aaa xxx" 時,匹配結果是:失敗。因爲 "$" 要求與字符串結束的地方匹配,因此,只有當 "aaa" 位於字符串的結尾的時候,"aaa$" 才能匹配,點擊測試 比如:"xxx xxx aaa"

    點擊測試 舉例3:表達式 ".\b." 在匹配 "@@@abc" 時,匹配結果是:成功;匹配到的內容是:"@a";匹配到的位置是:開始於2,結束於4。
    進一步說明:"\b" 與 "^" 和 "$" 類似,本身不匹配任何字符,但是它要求它在匹配結果中所處位置的左右兩邊,其中一邊是 "\w" 範圍,另一邊是 非"\w" 的範圍。

    點擊測試 舉例4:表達式 "\bend\b" 在匹配 "weekend,endfor,end" 時,匹配結果是:成功;匹配到的內容是:"end";匹配到的位置是:開始於15,結束於18。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章