我的正则表达式是灾难性的回溯吗?
Is my regex catastrophically backtracking?
我使用正则表达式来验证数字格式。
[-+]?([0-90-9]+((\,([0-90-9]{2,}))*\,([0-90-9]{3}))*)?(\.[0-90-9]*)?
当我为某些输入处理大量输入时,它似乎无限循环。我阅读了有关灾难性回溯的其他答案。
但我是正则表达式新手,需要一些帮助。
您能否提供任何可以使此正则表达式灾难性地回溯的输入。对我理解会有所帮助。谢谢。它也可以是一个很长的输入。
我正在使用 Java 模式和匹配器对象。
要验证您的输入字符串,请使用以下字符串:
^[-+]?(\d+((\,(\d{2,}))*\,(\d{3}))*)?(\.\d*)?$
正如我在评论中所写:
all of your capturing groups are optional , where using ?
or *
and if you want to validate input, add ^...$
wrapper
查看 https://regex101.com/r/eM7OFj/1 的右侧栏,标题为 MATCH INFORMATION
是的,这个正则表达式容易出现灾难性的回溯。具体来说,这个部分:
((\,([0-9]{2,}))*\,([0-9]{3}))*
供参考,其结构形式为
((,d)*,d)*
简化后,本质上是 (d+)*
。
字符串如
1,111,111,111,111,111,111,111,111,111,111,111,111,111,11.
因此会导致灾难性的回溯。
我使用正则表达式来验证数字格式。
[-+]?([0-90-9]+((\,([0-90-9]{2,}))*\,([0-90-9]{3}))*)?(\.[0-90-9]*)?
当我为某些输入处理大量输入时,它似乎无限循环。我阅读了有关灾难性回溯的其他答案。 但我是正则表达式新手,需要一些帮助。 您能否提供任何可以使此正则表达式灾难性地回溯的输入。对我理解会有所帮助。谢谢。它也可以是一个很长的输入。 我正在使用 Java 模式和匹配器对象。
要验证您的输入字符串,请使用以下字符串:
^[-+]?(\d+((\,(\d{2,}))*\,(\d{3}))*)?(\.\d*)?$
正如我在评论中所写:
all of your capturing groups are optional , where using
?
or*
and if you want to validate input, add^...$
wrapper
查看 https://regex101.com/r/eM7OFj/1 的右侧栏,标题为 MATCH INFORMATION
是的,这个正则表达式容易出现灾难性的回溯。具体来说,这个部分:
((\,([0-9]{2,}))*\,([0-9]{3}))*
供参考,其结构形式为
((,d)*,d)*
简化后,本质上是 (d+)*
。
字符串如
1,111,111,111,111,111,111,111,111,111,111,111,111,111,11.
因此会导致灾难性的回溯。