我有以下模式:
^(01|04|05|06|PP|PPC)[0-9]*$
如果字符串以PP
开头并以数字结尾,则此方法有效。
如何在最后允许UK
?我想匹配一个字符串,如:PPC12345678UK
答案 0 :(得分:2)
^(01|04|05|06|PP|PPC)[0-9]*(UK)?$
在正则表达式?
means "0 or 1"中,即它等同于编写{0,1}
。它使属性“可选”。
因此,上面的正则表达式将匹配字符串:
PP23462937
PPC328472936UK
匹配字符串:
01937492384U
068203472K
答案 1 :(得分:1)
最佳做法是在正则表达式中为可选的序列原子使用可选的非 - 捕获组。此外,当使用交替组时,最好确保每个分支(|
- 分开)在同一位置不匹配。
所以,我建议:
^(?:0[1456]|PPC?)[0-9]*(?:UK)?$
<强>详情:
^
- 字符串的开头(?:0[1456]|PPC?)
- 两种选择中的任何一种:
0[1456]
- 0
后跟1
,4
,5
或6
|
- 或PPC?
- PP
或PPC
。[0-9]*
- 零个或多个数字(?:UK)?
- 选项UK
substring $
- 字符串结束。请参阅[Ref]: .NET regex demo
答案 2 :(得分:0)
最后添加英国
^(01|04|05|06|PP|PPC)[0-9]*UK$
或者,正如@Tom Lord刚回应,带问号可选:
^(01|04|05|06|PP|PPC)[0-9]*(UK)?$
如果您不想在最后使用(?:)非捕获组捕获英国:^(01|04|05|06|PP|PPC)[0-9]*(?:UK)?$