有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我有以下正则表达式哪种作品:

[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) 个答案

  1. # 1 楼答案

    (?=\w{5,})\w*[0-9]+\w*
    

    这应该对你有帮助。此正则表达式匹配任何字符串(即\w*[0-9]+\w*,其中\w是[a-zA-Z0-9\]的缩写)

    在开始时,有一个肯定的前瞻,它断言匹配中的行中至少有5个单词字符。这样,单词中任何少于5个字符都会导致前瞻失败

  2. # 2 楼答案

    在第一个模式中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,})断言字符a-z或数字0-9的5次或5次以上
    • (?=[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

    在爪哇

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