正则表达式,用于匹配长度大于n的字母和数字的字符串?

时间:2019-11-03 09:38:31

标签: java regex

我希望编写一个正则表达式,将数字与字符串匹配。

我下面的正则表达式是什么样的作品:

[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,}

2 个答案:

答案 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字边界

Regex demo

在Java中

String regex = "\\b(?=[a-z0-9]{5,})(?=[a-z0-9]*[a-z])[a-z0-9]*[0-9][a-z0-9]*\\b";