1. <i id="s6b2k"><small id="s6b2k"></small></i>
    <b id="s6b2k"><bdo id="s6b2k"></bdo></b>
  2. <wbr id="s6b2k"></wbr>

    如何使用正則匹配最后一個字符串詳解_正則表達式

    來源:腳本之家  責任編輯:小易  

    前幾天遇到一個需求,輸入的是

    <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>
    

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

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

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

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

    這里寫圖片描述

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

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

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

    ^匹配字符串串首

    其次,再這三個位置上進行篩選,能夠看出這三個位置的區別是后面是否有</user>,如果沒有的話那么它就是最后一個</user>后面的位置。在之前的表達式后面添上(?![\w\W]*?</user>)此時表達式變為(?<=</user>)(?![\w\W]*?</user>)

    這里寫圖片描述

    能夠看到得到了最后一個匹配結果。

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

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

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

    這里寫圖片描述

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

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

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

    這里寫圖片描述 

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

    這里寫圖片描述 

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

    這里寫圖片描述

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

    這里寫圖片描述

    總結

    到此這篇關于如何使用正則匹配最后一個字符串詳解的文章就介紹到這了,更多相關正則匹配最后一個字符串內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

    您可能感興趣的文章:正則表達式匹配不包含某些字符串的技巧js 正則表達式學習筆記之匹配字符串正則表達式模式匹配字符串基礎知識正則匹配密碼只能是數字和字母組合字符串功能【php與js實現】請教一個正則表達式,匹配所有Html標簽外部的指定字符串使用正則表達式匹配[***]樣式的字符串

  3. 本文相關:
  4. 正則表達式匹配${key}并在java中使用的詳細方法
  5. regexp對象的方法和屬性
  6. php正則表達式基礎入門
  7. 正則表達式匹配不包含某些字符串的技巧
  8. 用正則表達式判斷字符串是漢字還是拼音的js函數代碼
  9. vbs中的正則表達式的用法大全
  10. 正則表達式提取圖片路徑 并過濾掉指定字符的寫法
  11. 正則表達式中的反向預搜索(上)
  12. 簡單的html轉換ubb的程序
  13. js正則表達式之search方法講解
  14. 正則表達式怎么匹配字符串中最后一串數字?
  15. 正則表達式怎么代表最后一個字符
  16. 正則表達式:怎么匹配最后一次出現的某個字符
  17. 正則表達式怎么保留最后一個字符后面的內容?
  18. 正則表達式匹配最后一個指定的字符
  19. 正則表達式,如何得到最后一個匹配項
  20. 正則表達式怎么匹配引號內的最后一個字符
  21. 正則表達式:如何匹配最后一次出現的某個字符
  22. 提取字符串中最后一個數字 (用正則表達式)?
  23. 用正則表達式提取字符串中最后一個“\”開始的字符串。
  24. 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全javascriptasp.netphp編程ajax相關正則表達式asp編程jsp編程編程10000問css/htmlflex腳本加解密web2.0xml/rss網頁編輯器相關技巧安全相關網頁播放器其它綜合dart首頁正則表達式匹配不包含某些字符串的技巧js 正則表達式學習筆記之匹配字符串正則表達式模式匹配字符串基礎知識正則匹配密碼只能是數字和字母組合字符串功能【php與js實現】請教一個正則表達式,匹配所有html標簽外部的指定字符串使用正則表達式匹配[***]樣式的字符串正則表達式匹配${key}并在java中使用的詳細方法regexp對象的方法和屬性php正則表達式基礎入門正則表達式匹配不包含某些字符串的技巧用正則表達式判斷字符串是漢字還是拼音的js函數代碼vbs中的正則表達式的用法大全正則表達式提取圖片路徑 并過濾掉指定字符的寫法正則表達式中的反向預搜索(上)簡單的html轉換ubb的程序js正則表達式之search方法講解java 正則表達式詳解正則表達式匹配任意字符(包括換最新手機號碼、電話號碼正則表達比較正宗的驗證郵箱的正則表達式javascript 手機號碼正則表達式驗正則表達式匹配不包含某些字符串js利用正則配合replace替換指定字正則中需要轉義的特殊字符小結js正則函數match、exec、test、s匹配中文漢字的正則表達式介紹正則表達式下全部符號解釋說明javascript使用正則驗證身份證號(簡單)用正則提取全部的匹配結果的代碼js正則表達式之replace函數用法javascript正則表達式迷你書之貪婪模式-學正則 捕獲組(capture group)正則表達式模式修飾符用正則表達式表示不包含2950的字符串一個正則的寫法 php正則刪除字符串左、右或兩端的空格經驗總
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.yu113.com All Rights Reserved
    战天txt全集下载