正则表达式可以找到重复的字符吗?

Jes*_*ose 8 regex

我的用户插入了像

________________________
************************
------------------------
????????????????????????
Run Code Online (Sandbox Code Playgroud)

格式化文档(不要问我关于我的用户!).显示片段时看起来很糟糕.如何删除任何字符的重复?我可以添加单独的过滤器,但它将是一个恒定的猫捉老鼠游戏.

正则表达式可以过滤这些吗?

Sim*_*han 12

尝试类似的东西:

(.)\1{5,}
Run Code Online (Sandbox Code Playgroud)

哪个匹配任何字符,然后匹配该字符的5个或更多.如果你的语言使用正则表达式模式的字符串,请记住逃避\!

  • +1,但我会使用`[^ ​​a-zA-Z0-9]`而不是`.` (2认同)

luv*_*ere 6

您可以使用简单的正则表达式删除任何字符的重复 (.)\1+

然而,这将赶上合法用途为好,如在他们的拼写(增加了一倍字母的单词气球,拼写,以及等).

因此,您可能希望将表达式限制为某些不允许的字符,尽管保持尽可能通用,以便不必随时修改它,因为您的用户会找到要使用的新字符.
一种可能的解决方案是禁止重复的非字母和非数字字符:

([^A-Za-z0-9])\1+

但即使这不是所有情况的最终解决方案,因为您的一些用户实际上可能决定使用实际的字母序列作为分隔符:

ZZZZZZZZZZZZZZZZZZZZZZ
BBBBBBBBBBBBBBBBBBBBBB
ZZZZZZZZZZZZZZZZZZZZZZ
Run Code Online (Sandbox Code Playgroud)

为了不允许这种情况,并允许合法使用某些重复的非字母字符(例如在省略号中......),您可以使用正则表达式将字符重复限制为最大值3使用如下语法(<pattern>)\1{min, max}:(.)\1{4,}匹配违规字符序列,最小长度为4,未指定最大值.