正則表達式之 \b


引用網上一段話

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

如果需要更精確的說法,\b 匹配這樣的位置:它的前一個字符和后一個字符不全是(一個是,一個不是或不存在) \w。

很多人不怎么理解正則中的 \b 含義,看到上面一段話后,很多人還是不怎么理解 \b 究竟是怎樣的一個“位置”。

今天就來說說我的理解。

什么是位置

It's a nice day today.

'I' 占一個位置,'t' 占一個位置,所有的單個字符(包括不可見的空白字符)都會占一個位置,這樣的位置我給它取個名字叫“顯式位置”。

注意:字符與字符之間還有一個位置,例如 'I' 和 't' 之間就有一個位置(沒有任何東西),這樣的位置我給它取個名字叫“隱式位置”。

“隱式位置”就是 \b 的關鍵!通俗的理解,\b 就是“隱式位置”。

此時,再來理解一下這句話:

如果需要更精確的說法,\b 匹配這樣的位置:它的前一個字符和后一個字符不全是(一個是,一個不是或不存在) \w。

我用我的話來翻譯一下這句話:

“隱式位置” \b,匹配這樣的位置:它的前一個“顯式位置”字符和后一個“顯式位置”字符不全是 \w。

此刻,有沒有一種豁然開朗的感覺?有么有?有么有?有么有?

實例講解

就用 "It's a nice day today." 舉例說明:

正確的正則:\bnice\b

分析:第一個 \b 前面一個字符是空格,后面一個字符是 'n',不全是 \w,所以可以匹配出 'n' 是一個單詞的開頭。第二個 \b 前面一個字符是 'e',后面一個字符是空格,不全是 \w,可以匹配出 'e' 是一個單詞的結尾。所以,合在一起,就能匹配出以 'n' 開頭以 'e' 結尾的單詞,這里就能匹配出 "nice" 這個單詞。

錯誤的正則:a\bnice

分析:我見過有人類似於這樣來寫正則,想要達到的目的是匹配出上一個單詞以 'a' 結尾,下一個單詞以 'n' 開頭的部分,這里想匹配出 "a nice"。但是這個正則表達的可不是這個目的,\b 前面是字符 'a',后面是字符 'n',兩個都是“顯式字符”,顯然違背了 \b 的含義,所以這就是個錯誤的表達式,匹配不出任何東西。想要匹配出 "a nice",正確的正則寫法是:a\b.\bnice(不能換行)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM