我需要捕获一行中的重复模式。

例如 :
toto#titi#toto#titi#tututoto#titi#tutu#tata#等...

这是我的正则表达式:(?:[\w]*#){1,}

我需要捕捉toto,titi,tutu ...

但是,即使Matcher.matches()返回true,我拥有的唯一组就是最后捕获的模式:

toto#titi#-> 1组tititoto#titi#tutu-> 1组tututoto#titi#tutu#tata-> 1组tata

您能告诉我为什么以及如何解决吗?

非常感谢

阿德里安

最佳答案

您将需要此RegEx:(\w+)#?并通过以下方式进行所有匹配

Pattern pattern = Pattern.compile("(\\w+)#?");
Pattern check = Pattern.compile("^[\\w#]+$");
if (!check.matcher(input).matches()) // As requested: Sanity check
    throw new IllegalArgumentException("Bogus input received :(");
Matcher m = pattern.matcher(input);
while (m.find()) {
    String matched = m.group(1); // Iterates over the occurences
    System.out.println("I found " + matched);
}


tata#titi#tutu的输出:

I found tata
I found titi
I found tutu


并不是在这种简单的情况下,代码

for (String matched : input.split("#"))
    System.out.println("I found " + matched);


本质上是等效的。因此,您不必在这里使用RegEx。
从本质上讲,我的意思是String.split("#")将为您提供空的String,例如#tata#titi##tutu(这里总共2个),而正则表达式也需要更改为(\w*)#?才能找到它们。

07-25 20:26