引用網上一段話:html
\b 是正則表達式規定的一個特殊代碼(好吧,某些人叫它元字符,metacharacter),表明着單詞的開頭或結尾,也就是單詞的分界處。雖然一般英文的單詞是由空格,標點符號或者換行來分隔的,可是 \b 並不匹配這些單詞分隔字符中的任何一個,它只匹配一個位置。正則表達式
若是須要更精確的說法,\b 匹配這樣的位置:它的前一個字符和後一個字符不全是(一個是,一個不是或不存在) \w。spa
不少人不怎麼理解正則中的 \b 含義,看到上面一段話後,不少人仍是不怎麼理解 \b 到底是怎樣的一個「位置」。翻譯
今天就來講說個人理解。htm
It's a nice day today.blog
'I' 佔一個位置,'t' 佔一個位置,全部的單個字符(包括不可見的空白字符)都會佔一個位置,這樣的位置我給它取個名字叫「顯式位置」。it
注意:字符與字符之間還有一個位置,例如 'I' 和 't' 之間就有一個位置(沒有任何東西),這樣的位置我給它取個名字叫「隱式位置」。meta
「隱式位置」就是 \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(不能換行)
http://www.cnblogs.com/litmmp/p/4925374.html