我希望编写一个正则表达式,将数字与字符串匹配。
我下面的正则表达式是什么样的作品:
[a-z0-9]*([a-z]+[0-9]+)+[a-z0-9]*
结果:
abc1234aa121aaa //Matches
abc123 //Matches
12abc123sd12 //Matches
abcaaaaaa //Does not match
ab12b12b12b2321b3 //Matches
ab12b12b12b2321b //Matches
1abc1234aa121aaa //Matches
v2 //Matches
但是如果我要匹配长度为5或更大的字符串,它将不起作用
([a-z0-9]*([a-z]+[0-9]+)+[a-z0-9]*){5,}
答案 0 :(得分:1)
(?=\w{5,})\w*[0-9]+\w*
这应该对您有帮助。此正则表达式匹配任何字符的字符串(即\ w * [0-9] + \ w *,其中\ w是[a-zA-Z0-9_]的简写)
一开始,有一个积极的前瞻,它断言比赛中连续至少有5个单词字符。这样,单词中的少于5个字符将使前瞻失败。
答案 1 :(得分:0)
在第一个模式中v2
匹配,但是由于您有固定的顺序[a-z]+[0-9]+
,因此2v
会不匹配。
在第二种模式中使用量词{5,}
并使用[a-z]+[0-9]+
时,最小长度至少为10。
如果您想match a string with alphabets AND numbers with length greater than n
以便仅数字不匹配,则可以使用:
\b(?=[a-z0-9]{5,})(?=[a-z0-9]*[a-z])[a-z0-9]*[0-9][a-z0-9]*\b
\b
字边界(?=[a-z0-9]{5,})
声明5个或更多字符a-z或数字0-9 (?=[a-z0-9]*[a-z])
断言至少1个字符a-z [a-z0-9]*
匹配0+次a-z或0-9 [0-9]
匹配数字0-9 [a-z0-9]*
匹配0+次a-z或0-9 \b
字边界在Java中
String regex = "\\b(?=[a-z0-9]{5,})(?=[a-z0-9]*[a-z])[a-z0-9]*[0-9][a-z0-9]*\\b";