用于检测重复符号的java正则表达式
我正在寻找能够检测字符串中重复符号的正则表达式。目前,我还没有找到满足我所有需求的解决方案
要求非常简单:
- 检测字符串中的任何重复符号李>
- 能够设置重复计数(如超过两次)
所需检测的示例(符号“a”,超过2次,如果检测到则为真,否则为假)
“Abcdefg”-假
“AbcdaBCD”-假
“abcd_ab_ab”-真(符号“a”用了三次)
“aabbaabb”-真(符号“a”使用了四次)
由于我不是正则表达式的专家,使用它们-代码片段和解释将不胜感激
谢谢
# 1 楼答案
试试这个正则表达式:
(.)(?:.*\1)
它基本上匹配任何字符(
.
),后跟任何字符.*
和它本身\1
。如果要检查2个或更多重复,请仅在末尾添加{n,}
,其中n
是要检查的重复次数# 2 楼答案
我认为
将工作:
(.)
匹配单个字符并捕获.*
匹配任何中间字符\1
再次匹配捕获的组李>(如果字符串包含通常与
.
不匹配的字符,则需要使用DOTALL
标志进行编译,或者将.
替换为[\s\S]
或类似内容)如果您想要求至少找到3次,只需更改后两个项目符号的量词:
等等
但是这将是非常低效的,因为它必须在字符串中的每个字符和字符串末尾之间进行“搜索下一个匹配字符”,使其至少是二次的
你最好不要使用正则表达式,例如
这会将所有相同的字符排序在一起,允许您在查找相邻的相等字符时只传递字符串
请注意,这对任何符号都不起作用:它将分割多个字符码点,如🍕. 您可以调整上面的代码以使用代码点,而不是字符
# 3 楼答案
是的,这样的正则表达式存在,只是因为字符集是有限的
这毫无意义。使用另一种方法:
现在你已经计算了所有的字符,你可以随心所欲地使用它们