擅长:python、mysql、java
<p>见<a href="http://www.regular-expressions.info/catastrophic.html" rel="nofollow noreferrer">Runaway Regular Expressions: Catastrophic Backtracking</a>。你知道吗</p>
<p>简言之,如果有非常多的组合,一个子串可以被分割成正则表达式的各个部分,正则表达式匹配器可能最终会尝试所有这些组合。你知道吗</p>
<p>像<code>(x+)+</code>和<code>x+x+</code>这样的结构实际上保证了这种行为。你知道吗</p>
<p>要检测和修复有问题的构造,可以使用以下概念:</p>
<ul>
<li><p>在概念层面上,有问题的构造意味着正则表达式是不明确的,也就是说,如果忽略贪婪/懒惰的行为,就不会有一个“正确”的将某些文本分割成正则表达式的部分(或者,等价地,它的子表达式)。因此,为了避免/解决问题,您需要看到并消除所有的歧义。你知道吗</p>
<ul>
<li><p>一种方法是</p>
<ul>
<li>始终将文本分成有意义的部分(=对手头的任务有不同意义的部分),并且</li>
<li>以一种不会混淆的方式定义这些部分(=使用相同的特征,如果你是手工解析的话,你自己会用这些特征来判断哪个是哪个)</li>
</ul></li>
</ul></li>
</ul>