san*_*093 20 java regex pattern-matching
我需要正则表达式来匹配以下情况.
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).
对于第二个问题:
\\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)
据我所知,第一种情况确实是不可能的.正则表达式引擎对自然数字或字母表的顺序一无所知.但至少可以区分3个或更多数字和3个或更多字母,例如:
[a-z]{3,}|[A-Z]{3,}|\d{3,}
Run Code Online (Sandbox Code Playgroud)
这符合abcd,ABCDE或123但不匹配ab2d,A5c4或者12z,例如.据此,第二种情况可以在较短的版本中正确给出:
(\w)\1{2,}
Run Code Online (Sandbox Code Playgroud)