灾难性的回溯问题解决方案

时间:2018-05-21 11:22:44

标签: regex

我正在测试以下正则表达式并且遇到灾难性的回溯问题。

我的正则表达式是:

(\s|\S)*((\%3C)|<)((\%2F)|\/)*[a-zA-Z0-9\%]+((\s|\S)*)+((\%3E)|>)(\s|\S)*

用字符串测试:

<<<<<<<<<<<<<<<<<<<<<fdslkjdskldsj dsfdlskhfdskhds dskfhdskjfhdsjkfhhaskdfffffshs

请建议我解决我在正则表达式模式中所做的错误。

1 个答案:

答案 0 :(得分:0)

原始正则表达式似乎试图匹配简单的HTML标记 - 无论是纯文本还是URL编码形式 - 没有嵌入多行文本的属性。例如paint.setTextAlign(Paint.Align.CENTER);

如果是这样,那么这样的话:

This is some <b>bolded</b> text.

会捕获文本中的标记(并且在给定您提供的输入时不会失败。)

一点一点地解释,这里是如何运作的:

(?i)[\s\S]*?((?:<|%3C)(?:\/|%2F)?[a-z\d]+(?:>|%3E))[\s\S]*?