用于匹配 3 个或更多连续连续字符和连续相同字符的正则表达式

2022-09-01 06:34:38

我需要正则表达式来匹配以下情况。

  1. 3个或更多连续的连续字符/数字;例如 123、abc、789、pqr 等。
  2. 3个或更多连续的相同字符/数字;例如 111、aaa、bbb、222 等。

答案 1

我不认为你可以(很容易)在第一种情况下使用正则表达式。不过,第二种情况很简单:

Pattern pattern = Pattern.compile("([a-z\\d])\\1\\1", Pattern.CASE_INSENSITIVE);

由于表示按组匹配的部分,因此将匹配范围内或数字()的三个相同字符的任何序列。\\11a-z\d

更新

为了清楚起见,您可以对第一种情况使用正则表达式。但是,这种模式是如此费力和荒谬地复杂,以至于你最好根本不这样做。特别是如果你想真正覆盖所有的字母表。在这种情况下,您应该通过迭代Unicode字符集或类似内容的字符代码来以编程方式生成模式,并为每三个连续字符生成分组。但是,您应该意识到,通过为模式匹配器生成如此大的决策树,行进性能必然会受到影响(其中Unicode字符集的大小减去2的组数)。O(n)n


答案 2

我不同意,案例1可以正则表达式,但你必须告诉它匹配的序列......这有点冗长和无聊:

/(abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz|012|123|234|345|456|567|678|789)+/ig

http://regexr.com/3dqln