溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

正則表達(dá)式的選擇符怎么用

發(fā)布時(shí)間:2021-12-14 17:31:26 來(lái)源:億速云 閱讀:130 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了正則表達(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í)!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI