栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

正则表达式精确匹配n个字母出现和m个数字出现

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正则表达式精确匹配n个字母出现和m个数字出现

您可以使用

^(?=[^A-Z]*[A-Z][^A-Z]*$)(?=[^a-z]*[a-z][^a-z]*$)(?=(?:D*d){6}D*$)[a-zA-Z0-9]{8}$

参见regex演示(由于多行输入而有些修改)。在Java中,不要忘记使用双反斜杠(例如

\d
,匹配一个数字)。

这是一个细分:

  • ^
    -字符串的开头(假设不使用多行标志)
  • (?=[^A-Z]*[A-Z][^A-Z]*$)
    -检查是否只有1个大写字母(用于
    p{Lu}
    匹配任何Unipre大写字母和
    P{Lu}
    其他字符)
  • (?=[^a-z]*[a-z][^a-z]*$)
    -类似检查是否只有1个小写字母(或者使用
    p{Ll}
    P{Ll}
    匹配Unipre字母)
  • (?=(?:D*d){6}D*$)
    -检查字符串中是否有六个数字(=从字符串的开头开始,可以有0个或多个非数字符号(
    D
    匹配除数字以外的任何字符,也可以将其替换为
    [^0-9]
    ),然后再跟一个数字(
    d
    ),然后是0或多个非数字字符(
    D*
    ),直到字符串(
    $
    )的末尾,然后
  • [a-zA-Z0-9]{8}
    -精确匹配8个字母数字字符。
  • $
    -字符串结尾。

按照逻辑,我们甚至可以将其简化为

^(?=[^a-z]*[a-z][^a-z]*$)(?=(?:D*d){6}D*$)[a-zA-Z0-9]{8}$

可以删除一个条件,因为我们只允许使用大小写字母和数字

[a-zA-Z0-9]
,并且当我们应用2个条件时, 匹配
字符串时会自动执行第三个条件(在这种情况下,一个字符必须为大写)。

当将它与Java

matches()
方法一起使用时
^
,无需
$
在模式的开头和结尾处使用和定位符,但是在前瞻中仍然需要它:

String s = "K82v6686";String rx = "(?=[^a-z]*[a-z][^a-z]*$)" +      // 1 lowercase letter check "(?=(?:\D*\d){6}\D*$)" +       // 6 digits check "[a-zA-Z0-9]{8}";      // matching 8 alphanum chars exactlyif (s.matches(rx)) {    System.out.println("Valid"); }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454520.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号