5. 最小組團(tuán)(Atomic Groups)
最小組團(tuán)是無捕捉的特殊正則表達(dá)式分組。通常用來提高正則表達(dá)式的效能,也能用于消除特定匹配。一個(gè)最小組團(tuán)可以用(?>pattern) 來定義,其中pattern是匹配式。
/(?>his|this)/
當(dāng)正則引擎針對(duì)最小組團(tuán)進(jìn)行匹配時(shí),它會(huì)跳過組團(tuán)內(nèi)標(biāo)記的回溯位置。以單詞“smashing”為例,當(dāng)用上面的正則表達(dá)式匹配時(shí),正則引擎會(huì)先嘗試在“smashing”里尋找“his”。顯然,找不到任何匹配。此時(shí),最小組團(tuán)就發(fā)揮作用了:正則引擎會(huì)放棄所有回溯位置。也就是說,它不會(huì)嘗試再從“smashing”里查找“this”。為什么要這樣設(shè)置?因?yàn)椤癶is”都沒有返回匹配結(jié)果,包含有“his”的“this”當(dāng)然就更匹配不了了! 上面的例子并沒有什么實(shí)用性,我們用/t?his?/ 也能達(dá)到效果。再看看下面的例子:
/\b(engineer|engrave|end)\b/
如果把“engineering”拿去匹配,正則引擎會(huì)先匹配到“engineer”,但接下來就遇到了字詞邊界,\b,所以匹配不成功。然后,正則引擎又會(huì)嘗試在字串里尋找下一個(gè)匹配內(nèi)容:engrave。匹配到eng的時(shí)候,后面的又對(duì)不上了,匹配失敗。最后,嘗試“end”,結(jié)果同樣是失敗。仔細(xì)觀察,你會(huì)發(fā)現(xiàn),一旦engineer匹配失敗,并且都抵達(dá)了字詞邊界,“engrave”和“end”這兩個(gè)詞就已經(jīng)不可能匹配成功了。這兩個(gè)詞都比engineer短小,正則引擎不應(yīng)該再多做無謂的嘗試。
/\b(?>engineer|engrave|end)\b/
上面的替代寫法更能節(jié)省正則引擎的匹配時(shí)間,提高代碼的工作效率。
出處:笨活兒
責(zé)任編輯:bluehearts
上一頁 字詞邊界(Word Boundaries) 下一頁 遞歸(Recursion)
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|