前八个字母和最后一个数字的Regex



请帮我编写一个可工作的正则表达式。条件:

  1. 最多可以有9个字符(从1到9(
  2. 前八个字符只能是大写字母
  3. 最后一个字符只能是数字

示例:

不匹配:

  • S3
  • FT5
  • FGTU7
  • ERTYUOP9
  • ERTGHYUKM

对应于:

  • E
  • ERT
  • RTYUKL
  • VBNDEFRW3

我尝试使用以下内容:

^[A-Z]{1,8}d{0,1}$

但在这种情况下,FT5示例匹配,尽管它不应该匹配。

您可以使用基于交替的正则表达式:

^(?:[A-Z]{1,8}|[A-Z]{8}d)$

RegEx演示

RegEx详细信息:

  • ^:启动
  • (?::启动非捕获组
    • [A-Z]{1,8}:匹配1到8个大写字母
    • |:或
    • [A-Z]{8}d:匹配8个大写字母和一个数字
  • ):结束非捕获组
  • $:结束

您还可以使用负数lookhead:排除前7个大写字符后面跟着一个数字

^(?![A-Z]{1,7}d)[A-Z]{1,8}d?$
  • ^字符串开始
  • (?![A-Z]{1,7}d)否定前瞻以断言不是1-7个大写字符和一个数字
  • [A-Z]{1,8}匹配1-8倍大写字符
  • d?匹配可选数字
  • $字符串结束

Regex演示

使用支持所有格量词的正则表达式引擎,您可以编写:

^[A-Z]{1,7}+(?:[A-Z]d?)?$

演示

可选组中的字母只有在[A-Z]{1,7}+中的量词达到最大值并且有一个字母保留时才能成功。组中的字母只能是第8个字符。

对于.net正则表达式引擎(不支持所有格量词(,您可以使用原子组编写以下模式:

^(?>[A-Z]{1,7})(?:[A-Z]d?)?$

最新更新