2013-10-03 97 views
0

我有多個轉折捕捉組正則表達式捕獲組匹配查找

(a)|(b)|(c)|... 

難道還有比這一個更快的方式來訪問第一個匹配成功捕獲組的指數正則表達式?

(匹配是java.util.regex.Matcher中的一個實例)

int getCaptureGroup(Matcher matcher){ 
    for(int i = 1; i <= matcher.groupCount(); ++i){ 
     if(matcher.group(i) != null){ 
      return i; 
     } 
    } 
} 

回答

1

這取決於你的意思是更快。您可以使代碼更高效的利用start(int)代替group(int)

if(matcher.start(i) != -1){ 

如果不需要該組的實際內容,也沒有一點要創建一個新的字符串對象來保存它。我懷疑你會注意到任何性能差異,但沒有理由不是這樣做。

但是你仍然需要編寫相同數量的樣板代碼;這是沒有辦法的。與其他大多數語言相比,Java的正則表達式嚴重缺乏語法糖。

+0

感謝您的建議。更快意味着結果存儲在除迭代列表之外的其他結構中,並且可以根據複雜性訪問

-2

我猜的模式是這樣:

if (matcher.find()) { 
    String wholeMatch = matcher.group(0); 
    String firstCaptureGroup = matcher.group(1); 
    String secondCaptureGroup = matcher.group(2); 
    //etc.... 
} 

可能有不止一個匹配。所以你可以使用while循環遍歷所有比賽。

請看javadoc中的「組號」部分java.util.regex.Pattern

+0

這不是答案.....他問的是比他目前的實施更快的方式。 – Prabhakaran

+0

好的,答案是 - 他以錯誤的方式使用Pattern API。 – Admit

+0

這可能是錯字.....而不是返回我;這應該是返回matcher.group(我)..........我也不是下來的選民太... – Prabhakaran