Java正则表达式与字符串密码匹配

Java正则表达式与字符串密码匹配,java,regex,Java,Regex,我最近在教科书中遇到了这个问题: 我想写一个方法来检查字符串是否有: 至少十个字符 只有字母和数字 至少三位数 我试图通过Regx来解决它,而不是遍历每个字符;到目前为止,我得到的是: String regx = "[a-z0-9]{10,}"; 但这只符合前两个条件。我应该如何处理第三个条件?您可以对第三个条件使用正向前瞻,如下所示: ^(?=(?:.*\d){3,})[a-z0-9]{10,}$ ^表示字符串的开头 (?=…)是正向前瞻,它将搜索整个字符串以匹配(?=和)之间的任何内容

我最近在教科书中遇到了这个问题:

我想写一个方法来检查字符串是否有:

  • 至少十个字符
  • 只有字母和数字
  • 至少三位数
  • 我试图通过Regx来解决它,而不是遍历每个字符;到目前为止,我得到的是:

    String regx = "[a-z0-9]{10,}";
    
    但这只符合前两个条件。我应该如何处理第三个条件?

    您可以对第三个条件使用正向前瞻,如下所示:

    ^(?=(?:.*\d){3,})[a-z0-9]{10,}$
    
    • ^
      表示字符串的开头
    • (?=…)
      是正向前瞻,它将搜索整个字符串以匹配
      (?=
      之间的任何内容
    • (?:.*\d){3,}
      匹配字符串中至少3位数字。
      • *\d
        匹配前面有任何(或无)字符的数字(如果省略,则仅匹配连续数字)
      • {3,}
        匹配三个或更多的
        *\d
      • (?:…)
        是非捕获组
    • $
      表示字符串的结尾

    非常感谢的可能副本,在询问之前应该先搜索>非常感谢您的详细解释。我仍然有点迷失在积极的展望中,因为这是我第一次遇到他们。我目前对它们的理解是允许(?:.*\d){3,}搜索整个字符串的正向前瞻。并且?:允许.*\d{3}匹配任意三位数字,但不记住它们,因此它不会产生最后的{10,},并且这种形式的Regx只能与Java中的类模式一起使用?不使用字符串类方法,例如.matches()和.replaceAll()@Anlinyang是的,您获得了前瞻权,
    ?:
    允许使用括号对表达式进行分组(例如,
    *\d
    ),而无需捕获它(您需要对表达式进行分组,以便对其应用
    {3,}
    )。您可以在没有
    ?:
    的情况下使用相同的表达式,它仍然可以工作。@Anlinyang我不确定,我不懂Java,但据我所知,字符串类方法接受简单的正则表达式,所以我想您需要先创建一个模式,然后将字符串与之匹配。