注意pobrelkey和David Wallace的答案都是正确的,但是这里有更多解释…
该正则表达式之所以“疯狂”(标题为BTW)是因为它受到灾难性的回溯。它具有经典的
/^(A*)*$/形式。请注意,仅当模式与目标字符串不匹配时,才会发生这种失控行为。
考虑到失控模式:
^(A*|B*|C*|D*)*$有几种解决方法:
^(A|B|C|D)*$
-从该组中的四个替代项中删除星号(“零个或多个”量词)。^(A*+|B*+|C*+|D*+)*$
-使每个替代的星号量词都 具有所有格 (即,将每个都更改*
为*+
)。^(?>A*|B*|C*|D*)*$
-使包含替代物的组 原子化 。
后两个的性能比第一个要快很多,但是所有三个都将解决“ regex wilded”问题。(是的,最好不要使用正则表达式解析HTML。)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)