正则恰好4个字母3数字任何订单

  • 本文关键字:数字 任何订 4个 regex
  • 更新时间 :
  • 英文 :


我正在尝试做一条正则以获取这种情况:

正确:IUG4455i4ug455A4U345A

错误:IUGG453IIUG44555

需要正好是4个字母(以任何顺序(和3位数字(以任何顺序(。

我尝试使用该表达式

[A-Z]{3}\d{4}

但它仅接受字母(4(然后数字(3(。

您有几个选择:

选项1 :请参阅此处使用的REGEX

b(?=(?:d*[A-Z]){3})(?=(?:[A-Z]*d){4})[A-Zd]{7}b
  • b断言一个单词边界的位置
  • (?=(?:d*[A-Z]){3})积极的lookahead确保以下匹配
    • (?:d*[A-Z]){3}匹配以下3次
      • d*匹配任意数字的任何次数
      • [A-Z]匹配任何大写ASCII字符
  • (?=(?:[A-Z]*d){4})阳性lookahead确保以下匹配
    • (?:[A-Z]*d){4}匹配以下4次
      • [A-Z]*匹配任何大写ASCII字符,任意次数
      • d匹配任何数字
  • [A-Zd]{7}匹配任何数字或大写ASCII字符,完全7次
  • b断言为单词边界

如果需要考虑速度,则可以扩展上述选项并使用以下内容:

b(?=d*[A-Z]d*[A-Z]d*[A-Z])(?=[A-Z]*d[A-Z]*d[A-Z]*d[A-Z]*d)[A-Zd]{7}b

选项2 :请参阅此处使用的REGEX

b(?=(?:d*[A-Z]){3}(?!d*[A-Z]))(?=(?:[A-Z]*d){4}(?![A-Z]*d))[A-Zd]+b

类似于选项1,但使用负面lookahead来确保字符串中不存在额外的字符(大写ASCII字母或数字(。

有两个正面的lookaheads背对背模拟and,以确保从该特定位置开始满足两个子图案。由于您有两个条件(3个大写ASCII字母和4位数字(,因此应使用两个LookAheads。

作为替代方案,

(?:(?<d>d)|(?<c>[A-Z])){7}(?<-d>){3}(?<-c>){4}

不需要任何外观。它只是匹配了七个字母或数字,然后检查它找到了3个数字和4个字母。

调整3和4的品味...您的示例有4位数字和3个字母。

还添加单词边界或锚定,具体取决于您要匹配整个单词还是整个string

最新更新