我有这个正则表达式,想添加限制总长度不超过 15 个字符的规则。我看到了一些前瞻的例子,但它们不是很清楚。你能帮我修改这个表达式以支持新规则吗?
^([A-Z]+( )*[A-Z]+)+$
我有这个正则表达式,想添加限制总长度不超过 15 个字符的规则。我看到了一些前瞻的例子,但它们不是很清楚。你能帮我修改这个表达式以支持新规则吗?
^([A-Z]+( )*[A-Z]+)+$
由于您在标题中提到它,因此您的案例的负面展望将是:
^(?!.{16,})(regex goes here)+$
请注意开头的否定前瞻(?!.{16,})
,它检查字符串是否包含 16 个或更多字符。
但是,正如@TimPietzcker 指出的那样,您的正则表达式可以简化很多,并以不易回溯的形式重新编写,因此您应该使用他的解决方案。
实际上,所有这些都可以简化很多:
^[A-Z][A-Z ]{0,13}[A-Z]$
做你想要的。或者至少你当前的正则表达式做了什么(加上长度限制)。这尤其避免了在嵌套量词时遇到的灾难性回溯问题。
一个例子:
尝试ABCDEFGHIJKLMNOP
针对您的原始正则表达式的字符串。正则表达式引擎将立即匹配。现在试试字符串ABCDEFGHIJKLMNOPa
。正则表达式引擎需要将近230,000步才能确定它无法匹配字符串。每个额外的字符都会使确定失败匹配所需的步骤数加倍。
^(?=.{15}$)([A-Z]+( )*[A-Z]+)+$