我需要捕获一行中的重复模式。
例如 :toto#titi#
或toto#titi#tutu
或toto#titi#tutu#tata#
等...
这是我的正则表达式:(?:[\w]*#){1,}
我需要捕捉toto,titi,tutu ...
但是,即使Matcher.matches()
返回true,我拥有的唯一组就是最后捕获的模式:toto#titi#
-> 1组titi
,toto#titi#tutu
-> 1组tutu
,toto#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*)#?
才能找到它们。