2016-07-06 69 views
0

是否有可能找到正則表達式中與String的特定部分匹配的所有組?在Java-Regex中匹配多個組

Pattern pattern = Pattern.compile("(green trousers)|(green\\s+t)"); 
    Matcher matcher = pattern.matcher("my beautiful green trousers are red!"); 
    while (matcher.find()) { 
     for (int i = 1; i <= matcher.groupCount(); i++) { 
      if (matcher.group(i) != null) { 
       System.out.println("group " + i + " matched"); 
      } 
     } 
    } 

本示例僅返回第一組作爲匹配,但我也對第二組匹配的事實感興趣。

+2

不,這不是正則表達式如何工作。你將不得不檢查2種不同的模式,看看它們是否匹配。 –

回答

3

沒有直接的方法來做到這一點,正則表達式會從左到右消耗字符串,直到找到匹配。

使用|表示它將首先檢查第一個替代方案,如果它不匹配回溯並嘗試第二個替代方案。在這種情況下(green trousers)匹配,所以搜索停止並返回匹配。

0

沒有辦法檢查單個正則表達式中的所有情況,但是,有一些構造允許您檢查是否有多個子模式匹配特定子字符串,這些稱爲「零寬度斷言」(請參閱here,下»特殊構造«)

例子:

"(?=[ab]{5})[bc]{5}" 

將只匹配在bbbbb