1
我有多個捕獲基團的正則表達式:查找其捕獲組一個Matcher發現匹配與
String text = "one two uno third second tres";
Matcher matcher = Pattern.compile(regex).matcher(text);
for(int index = 0; matcher.find(index); index = matcher.end()) {
System.out.println(matcher.group());
}
問題:
String regex = "(first|second|third)|(one|two|three)|(uno|dos|tres)";
我可以通過從每個組String
尋找模式遍歷是,它並不告訴我它來自哪個組。
我可以比較發現針對matcher.group(#)
可用每個組的組,然後選擇哪一個不返回null
:
int numOfGroups = 3;
for(int index = 0; matcher.find(index); index = matcher.end()) {
String result = null;
int group = 0;
for(int i = 1; i <= numOfGroups; i++) {
String tmp = matcher.group(i);
if(tmp != null) {
result = tmp;
group = i;
break;
}
}
System.out.println(result + " " + group);
}
但是,按照最大添加另外3個步驟,這增加了時間複雜度(3組)每次迭代。
我怎麼能確定哪個組觸發了匹配?
檢查哪一組匹配的,不添加任何性能開銷真的。沒有魔法讓你獲得信息。例如,引擎不夠聰明,不知道你只想匹配一個組。 (對你來說)重要的事情就是用它作爲旗幟。 – sln
您可以通過僅檢查前兩個組來減少複雜性,如果它們都爲空,則最後一組必須是具有匹配的組。其他的想法可能是每種語言都有不同的模式。這樣你就會知道你正在使用哪種模式。 – Pshemo