如何将所有匹配的部分都用于正则表达式模式

时间:2015-04-24 13:24:10

标签: java regex sequencematcher

我必须在3个阶段解析一个字符串。只有第一阶段工作,在2和3阶段matcher.groupCount()返回0 - 这意味着它什么也没找到。我正在测试我的正则表达式在线测试仪,它很好。但在这里它不起作用。所以问题是我可能会遗漏某些东西,或者正则表达式中有错误吗?

String rawText = "ashjdajsdg:[requiredPartForFirstPattern]}asdassdasd";
Pattern firstPattern = Pattern.compile("(:\\[)(.*?)(\\]})");
List<String> firstList = parseContent(rawText, firstPattern);

执行后,firstList应只包含一个值(在本例中):&#34; requiredPartForFirstPattern&#34; (可以是任何字符或任何字符序列)。

现在我正在迭代firstList中的所有值并用2模式检查它们:

firstList中的所有值都将具有以下形式:&#34; [someText1],[someText2],[someText3]&#34;。

String rawText = "[someText1],[someText2],[someText3]"; 
Pattern secondPattern = Pattern.compile("(\\[([^]]*)\\])");
List<String> secondList = parseContent(rawText, secondPattern);

执行后,secondList应包含此值(在本例中):&#34; someText1&#34;,&#34; someText2&#34;,&#34; someText3&#34;。

最后是第三阶段。我迭代secondList中的所有值并用3模式检查它们。 secondList中的所有值都将具有以下形式: &#34;&#39; someValue1&#39;&#39; someValue2&#39;&#34;

String rawText = "'someValue1','someValue2'";
Pattern thirdPattern = Pattern.compile("('(.*?)')");
List<String> thirdList = parseContent(rawText, secondPattern);

执行后,secondList应包含此值(在本例中):&#34; someValue1&#34;,&#34; someValue2&#34;。

我的parseContent方法:

    private List<String> parseContent(String content, Pattern pattern) {
        List<String> matchedList = new LinkedList<>();

        Matcher matcher = pattern.matcher(content);
        if (matcher.find()) {
            for(int matchIndex = 0; matchIndex < matcher.groupCount(); ++matchIndex) {
                matchedList.add(matcher.group(matchIndex));
            }
        }
        return matchedList;
    }

1 个答案:

答案 0 :(得分:0)

  

你应该有while(matcher.find())而不是if语句。

if (matcher.find()) {
    for(int matchIndex = 0; matchIndex < matcher.groupCount(); ++matchIndex) {
        matchedList.add(matcher.group(matchIndex));
    }
}

我用以下代码替换了上面的代码:

while (matcher.find()) {
    matchedList.add(matcher.group(1));
}

工作正常,请求帮助。