(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)
不消耗字符,下一字符匹配會從預查之前的位置開始。
即后者只預查,不移動匹配指針。如: