我最近在教科书中遇到了这个问题:
我需要编写一个方法来检查字符串是否具有以下内容:
- 至少十个字符
- 只有字母和数字
- 至少三个数字
我尝试使用正则表达式来解决它,而不是逐个字符迭代; 这是我目前的代码:
String regx = "[a-z0-9]{10,}";
但这只能满足前两个条件。我应该如何处理第三个条件?
你可以这样写:
^(?=(?:.*\d){3,})[a-z0-9]{10,}$
^
表示字符串的开头。(?= ... )
是正向前瞻,它将搜索整个字符串以匹配 (?=
和 )
之间的任何内容。(?:.*\d){3,}
匹配字符串中至少有三个数字。
.*\d
匹配任何(或无)字符后跟数字(如果省略,则只匹配连续数字)。{3,}
匹配三个或更多的 .*\d
。(?: ... )
是非捕获组。$
表示字符串的结尾。?:
允许使用括号来分组表达式(例如 .*\d
)而不捕获它(你需要将表达式分组才能在其上应用 {3,}
)。你可以不使用 ?:
来使用相同的表达式,它仍然可以工作。 - Gerry