以下是在AAbbbc
中查找重复字符A的代码String stringToMatch = "abccdef";
Pattern p = Pattern.compile("((\\w)\\2+)+");
Matcher m = p.matcher(tweet);
while (m.find())
{
System.out.println("Duplicate character " + m.group(0));
}
现在的问题是我想要找到重复但连续3次或更多次的字符, 当我在上面的代码中更改2到3时,它不起作用, 有人可以帮忙吗?
答案 0 :(得分:3)
你不应该改变2到3,因为它是capture groups的数量,而不是它的频率。你可以在这里使用两组参考:
"((\\w)\\2\\2)+"
但是你的正则表达式仍然不像你的例子那样匹配字符串!因为它只是匹配重复的字符。为了这个目的,你可以使用以下正则表达式:
"((\\w)\\2+\\2)+.*"
答案 1 :(得分:3)
您可以使用重复量词。
byte[] test = {0x01, 0x02, 0x04, 0x05, 0x06, 0x07};
sig.update(test);
boolean verifies = sig.verify(sigToVerify);
现在,索引1捕获重复字符,而不是索引0,它引用整个匹配。只需更改重复量词内的数字,以匹配重复Pattern p = Pattern.compile("(\\w)\\1{2,}");
Matcher m = p.matcher(tweet);
while (m.find())
{
System.out.println("Duplicate character " + m.group(1));
}
或更多次n
的字符。
答案 2 :(得分:1)
原始正则表达式存在缺陷。它只找到“单词”字符(字母,数字,下划线)。要求是“找到连续重复3次或更多次的字符”。点是任意字符的元字符。
(?=(.)\1{3})(\1+)
因此,这将找到一个连续发生4次或更多次的角色(即,满足您对“重复”三次或更多次的角色的要求)。如果你的意思是“发生”,则将3更改为2.无论如何,它在捕获任何数据之前执行非消耗的“零长度断言”,因此应该更有效。只有在找到最低要求(单个字符重复至少3次)后,它才会消耗和捕获数据。然后你可以使用一个或多个'+'量词消耗它,因为你知道它是你想要的匹配;进一步的量化是多余的 - 你的积极前瞻已经确定(断言)。您的结果位于捕获组2“(\ 1+)”中,您可以将其称为\ 2。
注意:我使用perl命令行实用程序对其进行了测试,因此这是原始正则表达式。看起来您可能需要在使用您正在使用的编程语言之前转义某些字符。