簡體   English   中英

在Java模式匹配中重用消耗的字符?

[英]Reusing the consumed characters in pattern matching in java?

考慮以下模式:

aba

還有傻瓜。 源字符串:-

abababbbaba

01234567890    //Index Positions

使用java.util.regex包中的Pattern和Matcher類,只能發現此模式兩次,因為regex不會考慮已經消耗的字符。

如果我想重用一部分已經消耗的字符怎么辦。 也就是說,我要在這里進行3場比賽,一場在位置0,一場在2(之前已被忽略),一場在8。

我該怎么做??

我認為您可以使用indexOf ()這樣的東西。

String str = "abababbbaba";
        String substr = "aba";
        int location = 0;
        while ((location = str.indexOf(substr, location)) >= 0)
        {
            System.out.println(location);
            location++;
        }

印刷品:

0、2和8

您可以為此使用前瞻性 現在,你擁有的是在第一位置group(1)並在第二場比賽group(2) 兩者都會使您要搜索的句子中每個長度為3的字符串。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Question8968432 {
    public static void main(String args[]) {
        final String needle = "aba";
        final String sentence = "abababbbaba";
        final Matcher m = Pattern.compile("(.)(?=(..))").matcher(sentence);
        while (m.find()) {
            final String match = m.group(1) + m.group(2);
            final String hint = String.format("%s[%s]%s",
                sentence.substring(0, m.start()), match, 
                sentence.substring(m.start() + match.length()));
            if (match.equals(needle)) {
                System.out.printf("Found %s starting at %d: %s\n", 
                    match, m.start(), hint);
            }
        }
    }
}

輸出:

Found aba starting at 0: [aba]babbbaba
Found aba starting at 2: ab[aba]bbbaba
Found aba starting at 8: abababbb[aba]

您可以跳過final String hint部分,這只是向您顯示它匹配的內容和位置。

如果您可以更改正則表達式,則可以簡單地使用以下命令:

a(?=ba)

暫無
暫無

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

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