溫馨提示×

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

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

怎么使用正則匹配最后一個(gè)字符串

發(fā)布時(shí)間:2021-04-13 14:31:47 來(lái)源:億速云 閱讀:2002 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了怎么使用正則匹配最后一個(gè)字符串,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前幾天遇到一個(gè)需求,輸入的是

<user>
    <user>
        <name>a</name>
    </user>
    <user>
        <name>a</name>
    </user>
</user>
<password>123</password>

要求拿到

<user>
    <user>
        <name>a</name>
    </user>
    <user>
        <name>a</name>
    </user>
</user>

也就是去掉最后一個(gè)</user>后面的字符串。

方法有很多,我首先想到的是用正則匹配去掉</user>后面的字符串。

最后寫(xiě)出來(lái)的表達(dá)式是(?<=</user>)(?![\w\W]*</user>)[\w\W]+

首先用(?<=</user>)匹配所有前面是</user>的位置,如圖,總共有三個(gè)位置。

怎么使用正則匹配最后一個(gè)字符串

這里我們正則表達(dá)式(?<=</user>)的意思就是匹配的位置之前的字符串是</user>,也就是我們匹配到的位置在</user>之后。

這里用到了正則表達(dá)式語(yǔ)法中的斷言,有的書(shū)上也稱(chēng)該語(yǔ)法為預(yù)查或者環(huán)視,都是一樣的用法。有如下語(yǔ)法:
(?=pattern) 零寬正向先行斷言 (?!pattern) 零寬負(fù)向先行斷言 (?<=pattern) 零寬正向后行斷言 (?<!pattern) 零寬負(fù)向后行斷言

這里用到的是(?<=pattern),零寬表示它匹配的是在字符串中的位置,如同^匹配字符串串首,$匹配字符串串尾。正向代表它必須滿(mǎn)足pattern。后行代表它匹配的位置在pattern之后。

怎么使用正則匹配最后一個(gè)字符串

其次,再這三個(gè)位置上進(jìn)行篩選,能夠看出這三個(gè)位置的區(qū)別是后面是否有</user>,如果沒(méi)有的話那么它就是最后一個(gè)</user>后面的位置。在之前的表達(dá)式后面添上(?![\w\W]*?</user>)此時(shí)表達(dá)式變?yōu)?code>(?<=</user>)(?![\w\W]*?</user>)。

怎么使用正則匹配最后一個(gè)字符串

能夠看到得到了最后一個(gè)匹配結(jié)果。

這里的正則表達(dá)式(?!pattern) 是零寬負(fù)向先行斷言,也就是它會(huì)往后匹配pattern,匹配到的位置在pattern之前,并且匹配到的字符串必須不滿(mǎn)足pattern。

(?![\w\W]*?</user>)的意思是在匹配到的位置后面必須不是[\w\W]*?</user>,\w匹配的是[a-zA-Z0-9_]即匹配字母數(shù)字和下劃線,而\W匹配的是[^a-zA-Z0-9_]即不是字母數(shù)字也不是下劃線的字符,同時(shí)匹配這兩個(gè)就相當(dāng)于匹配任意字符。[\w\W]后面的*代表匹配0-任意多次,后面的?代表懶惰模式,即只要滿(mǎn)足條件就立即返回。

最后,在之前的正則表達(dá)式后面加上[\w\W]+貪婪匹配即盡可能多的匹配該位置后面的字符串。最終的正則表達(dá)式是(?<=</user>)(?![\w\W]*?</user>)[\w\W]*

怎么使用正則匹配最后一個(gè)字符串

最后的最后用四張圖簡(jiǎn)單地描述四種斷言的不同之處。

這里輸入的字符串都是123456。

(?=3),它匹配的位置是后面的字符為3的位置。

怎么使用正則匹配最后一個(gè)字符串 

(?<=3),它匹配的位置是前面的字符為3的位置。

怎么使用正則匹配最后一個(gè)字符串 

(?!3)匹配的位置是后面的字符不為3的位置,可以看到箭頭所指的地方?jīng)]有被匹配到,其他位置都被匹配到了。

怎么使用正則匹配最后一個(gè)字符串

(?<!3)匹配的位置是前面的字符不為3的位置,可以看到箭頭所指的地方?jīng)]有被匹配到,其他位置都被匹配到了。

怎么使用正則匹配最后一個(gè)字符串

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么使用正則匹配最后一個(gè)字符串”這篇文章對(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