我有RegExp条件是/^([0-9]*\.?[0-9])*$/
来测试字符串。
我的字符串是1.2.840.346991791506342.1482500253171661
(大字符串),第二个是1.2.3.201922311129.10038
(短字符串)。
由于两个字符串都正确,因此搜索成功。
但是当我在第二个短字符串的最后一个空格处添加空格时,它表明无效,这是正确的结论。
但是当我在第一个字符串中添加空格时,它应该按照代码显示无效的字符串,但是却被挂起,为什么它显示为挂起?
RegExp限制已用尽?解决办法是什么?
出于测试目的,您可以在记事本+中进行检查,^([0-9]*\.?[0-9])*$
直接使用此公式。
答案 0 :(得分:3)
您编写正则表达式的方式,嵌套量词会导致它进入 catastrophic backtracking 并导致其挂起/超时。
Catastrophic Backtracking Demo
您需要将正则表达式简化为类似的内容,
^[0-9]*(?:\.[0-9]+)*$
让我知道此正则表达式是否保留您的模式。
Regex Demo not running into timeout
通常,您应该避免在正则表达式中嵌套量词,而应尽可能以更简单的方式编写它们。即使对于1.2.840.3469931313.313
之类的短字符串,也要查看正则表达式要执行多少步骤,
如果您稍微增加字符串长度,则会遇到超时/灾难性的回溯。