我使用正則表達式來驗證數字格式。我的正則表達式是災難性的回溯?
[-+]?([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這種情況下,我可以肯定這就是問題 –