2017-05-28 84 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()); 

    } 
}