4. 字詞邊界(Word Boundaries)
字詞邊界是字串里的字詞字符(包括字母、數(shù)字和下劃線,自然也包括漢字)和非字詞字符之間的位置。其特殊之處就在于,它并不匹配某個(gè)實(shí)在的字符。它的長(zhǎng)度是零。 \b 匹配所有字詞邊界。
不幸的是,字詞邊界一般都被忽視掉了,大部分人都沒(méi)有在意他的現(xiàn)實(shí)意義。 例如,如果你想要匹配單詞“import”:
/import/
注意了!正則表達(dá)式有時(shí)候很調(diào)皮的。下面的字串也能和上面的式子匹配成功:
important
你或許覺(jué)得,只要在import前后加上空格,不就可以匹配這個(gè)獨(dú)立的單詞了:
/ import /
那如果遇上這種情況呢:
The trader voted for the import
當(dāng) import 這個(gè)詞在字串開(kāi)頭或者結(jié)尾時(shí),修改后的表達(dá)式仍然不能用。因此,考慮各種情況是必須的:
/(^import | import | import$)/i
別慌,還沒(méi)完呢。如果遇到標(biāo)點(diǎn)符號(hào)了呢?就為了滿(mǎn)足這一個(gè)單詞的匹配,你的正則可能就需要這樣寫(xiě):
/(^import(:|;|,)? | import(:|;|,)? | import(\.|\?|!)?$)/i
對(duì)于只匹配一個(gè)單詞來(lái)說(shuō),這樣做實(shí)在是有點(diǎn)大動(dòng)干戈了。正因如此,字詞邊界才顯得意義重大。要適應(yīng)上述要求,以及很多其他情況變種,有了字符邊界,我們所需寫(xiě)的代碼只是:
/\bimport\b/
上面所有情況都得到了解決。\ b 的靈活性就在于,它是一個(gè)沒(méi)有長(zhǎng)度的匹配。它只匹配兩個(gè)實(shí)際字符之間想象出的位置。它檢查兩個(gè)相鄰字符是否是一個(gè)為單字,另一個(gè)為非單字。情況符合,就返回匹配。如果遇到了單詞的開(kāi)頭或結(jié)尾, \b 會(huì)把它當(dāng)成是非單詞字符對(duì)待。由于import里面的 i 仍然被看成是單詞字符,import 就被匹配出來(lái)了。
注意,與\b相對(duì),我們還有\(zhòng)B,此操作符匹配兩個(gè)單字或者兩個(gè)非單字之間的位置。因此,如果你想匹配在某個(gè)單詞內(nèi)部的‘hi’,可以使用:
\Bhi\B
“this”、“hight”,都會(huì)返回匹配,而“hi there”則不會(huì)返回匹配。
出處:笨活兒
責(zé)任編輯:bluehearts
上一頁(yè) 已命名捕獲組(Named Groups) 下一頁(yè) 最小組團(tuán)(Atomic Groups)
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|