2017-05-28 39 views
0
while (matcher.find()) { 
    if (matcher.group(matcherGroup) != null) occurrence++; 
} 
return occurrence; 

這是我用來搜索特定組匹配數的代碼。但是沒有像matcher.group(matcherGroup1, matcherGroup2)這樣的功能,也沒有matcher.group(null)來搜索多個組或全部組。REGEX匹配器任何/所有組

我已閱讀Link組(將它的數組合併成一個)或多個組?

謝謝

+0

你最終的目標是什麼?你能提供一個例子嗎? –

回答

0

你不能寫你自己的matcherGroup實現嗎?您提供的鏈接是c#。

我寫了一個簡單的Java實現,它接受一個字符串,然後將其與多個RegExp模式進行匹配。然後返回匹配的數量。

或者,請更詳細地解釋您要做的事情。

package com.chocksaway; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.regex.Pattern; 

class SingleMatcher { 
    private Pattern pattern; 
    private java.util.regex.Matcher matcher; 
    private boolean found; 

    SingleMatcher(String input, String inputPattern) { 
     pattern = Pattern.compile(inputPattern); 
     matcher = pattern.matcher(input); 

     if (matcher.find()) { 
      this.found = true; 
     } 
    } 

    boolean getFound() { 
     return this.found; 
    } 
} 

class MatcherGroup { 
    private int matchedOccurances; 

    MatcherGroup(String input, List<String> multipleInputPattern) { 
     for (String inputPattern : multipleInputPattern) { 
      SingleMatcher eachSingleMatcher = new SingleMatcher(input, inputPattern); 
      if (eachSingleMatcher.getFound()) { 
       matchedOccurances++; 
      } 
     } 
    } 

    int getMatchedOccurances() { 
     return this.matchedOccurances; 
    } 
} 

/** 
* Author milesd on 28/05/2017. 
*/ 
public class RegExpMatcher { 
    public static void main(String[] args) { 
     SingleMatcher singleMatcher = new SingleMatcher("123", "\\d\\d\\d"); 
     System.out.println(singleMatcher.getFound()); 

     List<String> inputPatternList = new ArrayList<String>(); 
     inputPatternList.add("\\d\\d\\d"); 
     inputPatternList.add("John"); 

     MatcherGroup matcherGroup = new MatcherGroup("John", inputPatternList); 
     System.out.println(matcherGroup.getMatchedOccurances()); 

    } 
}