正則表達式-- (?:pattern)與(?=pattern)的區別


(pattern) : 匹配 pattern 並獲取這一匹配,所獲取的匹配可以從產生的 Matches 集合得到。
(?:pattern) :匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。
(?=pattern) :正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。

 

共同點

(?:pattern) 與 (?=pattern)都匹配pattern,但不會把pattern結果放到Matches的集合中,即Matcher.group()不會匹配到(?;pattern)與(?=pattern)

 

區別

  • (?:pattern) 匹配得到的結果包含pattern,(?=pattern) 則不包含。如:
    對字符串:"industry abc"的匹配結果:
    industr(?:y|ies) ---> "industry"
    industr(?=y|ies) ---> "industr"

    是否消耗字符
    (?:pattern) 消耗字符,下一字符匹配會從已匹配后的位置開始。
    (?=pattern) 不消耗字符,下一字符匹配會從預查之前的位置開始。
    即后者只預查,不移動匹配指針。如:
    正則表達式非獲取匹配


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM