前八个字母和最后一个数字的正则表达式

Regex for first eight letters and last number

请帮我编写一个有效的正则表达式。 条件:

  1. 最多 9 个字符(从 1 到 9)。
  2. 前八个字符只能是大写字母。
  3. last字符只能是数字.

示例:

不匹配:

对应于:

我尝试使用以下方法:

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

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

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

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

RegEx Demo

正则表达式详细信息:

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

您还可以使用负查找头排除前 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 demo

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

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

demo

optional group中的字母只有在[A-Z]{1,7}+中的量词达到最大且剩余一个字母时才能成功。组内字母只能是第8个字符

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

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