Aus*_*nTX 6 regex expression limit lookahead
我有这个正则表达式,并希望添加限制总长度不超过15个字符的规则.我看到了一些前瞻性的例子,但它们并不十分清楚.你能帮我修改一下这个表达式来支持新规则.
^([A-Z]+( )*[A-Z]+)+$
Run Code Online (Sandbox Code Playgroud)
Ric*_*lly 11
既然你在标题中提到它,你的案例的负面预测将是:
^(?!.{16,})(regex goes here)+$
Run Code Online (Sandbox Code Playgroud)
请注意开头的负向前瞻(?!.{16,})
,检查字符串是否没有16个或更多字符.
但是,正如@TimPietzcker指出的那样,你的正则表达式可以简化很多,并且以不容易回溯的形式重写,所以你应该使用他的解决方案.
Tim*_*ker 11
实际上,所有这些都可以简化很多:
^[A-Z][A-Z ]{0,13}[A-Z]$
Run Code Online (Sandbox Code Playgroud)
完全符合你的要求.或者至少你当前的正则表达式(加上长度限制).这尤其避免了灾难性回溯的问题,当你像这样嵌套量词时,你正在为自己做好准备.
例证:
尝试使用ABCDEFGHIJKLMNOP
原始正则表达式的字符串.正则表达式引擎会立即匹配.现在尝试字符串ABCDEFGHIJKLMNOPa
.这将需要正则表达式引擎将近230,000步,以确定它不能匹配字符串.并且每个附加字符使确定失败匹配所需的步骤数加倍.