栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

正则表达式变得疯狂:java.util.regex.Pattern匹配器进入了高CPU循环

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正则表达式变得疯狂:java.util.regex.Pattern匹配器进入了高CPU循环

注意pobrelkey和David Wallace的答案都是正确的,但是这里有更多解释…

该正则表达式之所以“疯狂”(标题为BTW)是因为它受到灾难性的回溯。它具有经典的

/^(A*)*$/
形式。请注意,仅当模式与目标字符串不匹配时,才会发生这种失控行为。

考虑到失控模式:

^(A*|B*|C*|D*)*$
有几种解决方法:

  • ^(A|B|C|D)*$
    -从该组中的四个替代项中删除星号(“零个或多个”量词)。
  • ^(A*+|B*+|C*+|D*+)*$
    -使每个替代的星号量词都 具有所有格 (即,将每个都更改
    *
    *+
    )。
  • ^(?>A*|B*|C*|D*)*$
    -使包含替代物的组 原子化

后两个的性能比第一个要快很多,但是所有三个都将解决“ regex wilded”问题。(是的,最好不要使用正则表达式解析HTML。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438994.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号