我使用正则表达式来验证数字格式。我的正则表达式是灾难性的回溯?
[-+]?([0-90-9]+((\,([0-90-9]{2,}))*\,([0-90-9]{3}))*)?(\.[0-90-9]*)?
当我为某些输入处理了大量输入时,它似乎无限循环。我读了关于灾难性回溯的其他答案。 但我是一个正则表达式新手,需要一些帮助。 可以请你提供任何可以使这个正则表达式灾难性回溯的输入。对我的理解有帮助。谢谢。它也可能是一个很长的投入。 我正在使用Java模式和匹配器对象。
我使用正则表达式来验证数字格式。我的正则表达式是灾难性的回溯?
[-+]?([0-90-9]+((\,([0-90-9]{2,}))*\,([0-90-9]{3}))*)?(\.[0-90-9]*)?
当我为某些输入处理了大量输入时,它似乎无限循环。我读了关于灾难性回溯的其他答案。 但我是一个正则表达式新手,需要一些帮助。 可以请你提供任何可以使这个正则表达式灾难性回溯的输入。对我的理解有帮助。谢谢。它也可能是一个很长的投入。 我正在使用Java模式和匹配器对象。
是的,这个正则表达式很容易发生灾难性的回溯。具体地,该段:
((\,([0-9]{2,}))*\,([0-9]{3}))*
作为参考,这具有以下形式
((,d)*,d)*
其中,简化的结构,基本上是(d+)*
。因此
字符串像
1,111,111,111,111,111,111,111,111,111,111,111,111,111,11.
会造成灾难性的回溯。
该字符串正常运行:( –
请注意,这只是锚定上下文中的问题,例如'.matches' –
@ SainathS.R然后使其不再 –
要验证输入字符串使用这一个:
^[-+]?(\d+((\,(\d{2,}))*\,(\d{3}))*)?(\.\d*)?$
正如我写了一篇评论:
所有捕获组是可选的,其中使用
?
或*
,如果你想验证输入,加^...$
包装
看看右边的吧https://regex101.com/r/eM7OFj/1标题:比赛信息
''[0-90-9]'可以更改为'[0-9]' – anubhava
该模式的要求是什么? '[0-90-9]'当然不是这里的主要问题,而是组内嵌套的量词。 –
谢谢,我注意到,但我会很感激,如果有人可以使这个正则表达式回溯infinitely.In这种情况下,我可以肯定这就是问题 –