您好,登錄后才能下訂單哦!
這篇文章主要介紹了正則表達(dá)式的選擇符怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
正則表達(dá)式中“|”表示選擇。你可以用選擇符匹配多個(gè)可能的正則表達(dá)式中的一個(gè)。
如果你想搜索文字“cat”或“dog”,你可以用<<cat|dog>>。如果你想有更多的選擇,你只要擴(kuò)展列表<<cat|dog|mouse|fish>>。
選擇符在正則表達(dá)式中具有***的優(yōu)先級(jí),也就是說(shuō),它告訴引擎要么匹配選擇符左邊的所有表達(dá)式,要么匹配右邊的所有表達(dá)式。你也可以用圓括號(hào)來(lái)限制選擇符的作用范圍。如<<\b(cat|dog)\b>>,這樣告訴正則引擎把(cat|dog)當(dāng)成一個(gè)正則表達(dá)式單位來(lái)處理。
正則表達(dá)式的選擇符的原理分析:
注意正則引擎的“急于表功”性
正則引擎是急切的,當(dāng)它找到一個(gè)有效的匹配時(shí),它會(huì)停止搜索。因此在一定條件下,選擇符兩邊的表達(dá)式的順序?qū)Y(jié)果會(huì)有影響。假設(shè)你想用正則表達(dá)式搜索一個(gè)編程語(yǔ)言的函數(shù)列表:Get,GetValue,Set或SetValue。一個(gè)明顯的解決方案是<<Get|GetValue|Set|SetValue>>。讓我們看看當(dāng)搜索SetValue時(shí)的結(jié)果。
因?yàn)?lt;<Get>>和<<GetValue>>都失敗了,而<<Set>>匹配成功。因?yàn)檎齽t導(dǎo)向的引擎都是“急切”的,所以它會(huì)返回***個(gè)成功的匹配,就是“Set”,而不去繼續(xù)搜索是否有其他更好的匹配。
和我們期望的相反,正則表達(dá)式并沒(méi)有匹配整個(gè)字符串。有幾種可能的解決辦法。一是考慮到正則引擎的“急切”性,改變選項(xiàng)的順序,例如我們使用<<GetValue|Get|SetValue|Set>>,這樣我們就可以?xún)?yōu)先搜索最長(zhǎng)的匹配。我們也可以把四個(gè)選項(xiàng)結(jié)合起來(lái)成兩個(gè)選項(xiàng):<<Get(Value)?|Set(Value)?>>。因?yàn)閱?wèn)號(hào)重復(fù)符是貪婪的,所以SetValue總會(huì)在Set之前被匹配。
一個(gè)更好的方案是使用單詞邊界:<<\b(Get|GetValue|Set|SetValue)\b>>或<<\b(Get(Value)?|Set(Value)?\b>>。更進(jìn)一步,既然所有的選擇都有相同的結(jié)尾,我們可以把正則表達(dá)式優(yōu)化為<<\b(Get|Set)(Value)?\b>>。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“正則表達(dá)式的選擇符怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。