请帮我编写一个可工作的正则表达式。条件:
- 最多可以有
9
个字符(从1到9( - 前八个字符只能是大写字母
- 最后一个字符只能是数字
示例:
不匹配:
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?)?$