正则表达式匹配3个或更多连续顺序字符和连续相同字符

san*_*093 20 java regex pattern-matching

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

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

Mil*_*eri 16

我不认为你可以在第一种情况下使用正则表达式.第二种情况很简单:

Pattern pattern = Pattern.compile("([a-z\\d])\\1\\1", Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)

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


Tot*_*oto 7

对于第二个问题:

\\b([a-zA-Z0-9])\\1\\1+\\b
Run Code Online (Sandbox Code Playgroud)

说明:

\\b               : zero-length word boundary
  (               : start capture group 1
    [a-zA-Z0-9]   : a letter or a digit
  )               : end group
  \\1             : same character as group 1
  \\1+            : same character as group 1 one or more times
\\b               : zero-length word boundary
Run Code Online (Sandbox Code Playgroud)


小智 7

我不同意,案例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
Run Code Online (Sandbox Code Playgroud)

http://regexr.com/3dqln


pem*_*ahl 6

据我所知,第一种情况确实是不可能的.正则表达式引擎对自然数字或字母表的顺序一无所知.但至少可以区分3个或更多数字和3个或更多字母,例如:

[a-z]{3,}|[A-Z]{3,}|\d{3,}
Run Code Online (Sandbox Code Playgroud)

这符合abcd,ABCDE123但不匹配ab2d,A5c4或者12z,例如.据此,第二种情况可以在较短的版本中正确给出:

  (\w)\1{2,}
Run Code Online (Sandbox Code Playgroud)