簡體   English   中英

如何使所有匹配的零件成為正則表達式模式

[英]How to get all matched parts to regex pattern

我必須分3個階段解析一個String。 僅第一階段有效,在2和3階段matcher.groupCount()返回0-這意味着什么也沒找到。 我正在在線測試儀中測試我的正則表達式,這很好。 但是在這里它不起作用。 所以問題是我可能錯過了某些東西,或者正則表達式有誤?

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

執行后,firstList應該僅包含一個值(在這種情況下):“ requiredPartForFirstPattern”(可以是任何char或任何char序列)。

現在,我迭代firstList中的所有值,並使用2個模式檢查它們:

firstList中的所有值將具有以下格式:“ [someText1],[someText2],[someText3]”。

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

執行后,secondList應該包含以下值(在這種情況下):“ someText1”,“ someText2”,“ someText3”。

最后是第三階段。 我迭代secondList中的所有值,並使用3個模式檢查它們。 secondList中的所有值將具有以下形式:“'someValue1','someValue2'”。

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

執行后,secondList應該包含以下值(在這種情況下):“ someValue1”,“ someValue2”。

我的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;
    }

您應該使用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));
}

工作正常,請尋求幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM