簡體   English   中英

如何控制Java正則表達式中的迭代步驟?

[英]How to control the iteration step in Java regex?

然而,這個話題令人困惑,例如,

final String pattern = "(abc)";

final String content = "dabcef";

Matcher m = Pattern.compile(pattern).matcher(content);

m.find()肯定會返回true。

我想知道是否有可能只處理一次字符,這意味着

“dab” - >未找到,“cef” - >未找到,結束。

謝謝!

編輯:

其實我想找到所有的比賽,而不是只檢查是否匹配。 例如,

abc abc def abc dab cef(實際上沒有空格)

將匹配^(。{3})*?(abc),但只有一次。 我期待3場比賽。

謝謝!

怎么樣:

final String pattern = "^(.{3})*(abc)";

我通過移動起始索引找到了解決方案。 感謝@Oil的建議!

public static void main(String[] args) {
    final String pattern1 = "^(.{3})*?(abc)";

    final String content1 = "efabcabcdabcefaabcdfabce"; // two matches

    final String content2 = "abcabcdabcefabc"; // three matches

    Matcher mStart = Pattern.compile(pattern1).matcher(content1);

    while (mStart.find()) {
        System.out.println(mStart.group(mStart.groupCount()));
        System.out.println(mStart.start() + ", " + mStart.end());

        mStart = mStart.region(mStart.end(), mStart.regionEnd());
    }

    //-----------------------------
    System.out.println("------------------------");

    mStart = Pattern.compile(pattern1).matcher(content2);

    while (mStart.find()) {
        System.out.println(mStart.group(mStart.groupCount()));
        System.out.println(mStart.start() + ", " + mStart.end());

        mStart = mStart.region(mStart.end(), mStart.regionEnd());
    }
}

暫無
暫無

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

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