GWT RegExp - 多个匹配

时间:2013-06-08 13:54:13

标签: java regex gwt jsoup

我想在输入字符串中找到所有“代码”匹配项(使用GWT RegExp)。当我调用“regExp.exec(inputStr)”方法时,它只返回第一个匹配,即使我多次调用它:

String input = "ff <code>myCode</code> ff <code>myCode2</code> dd <code>myCode3</code>";

String patternStr = "<code[^>]*>(.+?)</code\\s*>";

// Compile and use regular expression
RegExp regExp = RegExp.compile(patternStr);
MatchResult matcher = regExp.exec(inputStr);

boolean matchFound = (matcher != null); // equivalent to regExp.test(inputStr); 
if (matchFound) {
    // Get all groups for this match
    for (int i=0; i<matcher.getGroupCount(); i++) {
        String groupStr = matcher.getGroup(i);
        System.out.println(groupStr);
    }
}

我如何获得所有比赛?

编辑:像greedybuddha所说:正则表达式并不适合解析(X)HTML。我给了JSOUP一个尝试,它比正则表达式更方便。我的jsoup代码现在看起来像这样。我正在重命名所有代码标记并将它们应用于CSS类:

    String input = "ff<code>myCode</code>ff<code>myCode2</code>";
Document doc = Jsoup.parse(input, "UTF-8");

Elements links = doc.select("code"); // a with href

for(Element link : links){
    System.out.println(link.html());
    link.tagName("pre");
    link.addClass("prettify");
}

System.out.println(doc);

1 个答案:

答案 0 :(得分:1)

使用“g”flag编译正则表达式,以进行全局匹配。

RegExp regExp = RegExp.compile(patternStr,"g");

我认为您还希望“m”用于多行匹配,"gm"

话虽如此,对于HTML / XML解析,您应该考虑使用JSoup或其他替代方法。