正则表达式性能优化方法(高效正则表达式书写)
这里说的正则表达式优化,主要是针对目前常用的NFA模式正则表达式,详细可以参考:正则表达式匹配解析过程探讨分析(正则表达式匹配原理)。从上面例子,我们可以推断出,影响NFA类正则表达式(常见语言:GNU Emacs,Java,ergp,less,more,.NET语言, 源字符串:<script type="text/javascript">adsfadfsdasfsdafdsfsadfsa</script> 匹配要求,匹配<script….>….</script>标签里面所有内容,包括改标签 常见写法(1),因为<script后面可能出现字符、空白、特殊符号等,还有标签里面也可能出现各种js代码。我们简单方法是: 正则表达式:<script.*?>.*?</script> (测试工具使用了:regexBuddy) 总共花费115步,回溯了:48次。 因为我们使用”.”字符,匹配默认情况下除了n之外所有字符。 正则表达式:<script[^?>]+>[^<]+</script> 19步,0次回溯! ,步骤只有原先的15%左右,性能几倍的提升了! 1、使用正确的边界匹配器(^、$、b、B等),限定搜索字符串位置 如:我想匹配一些英文字母,它后面接的是数字。如:abc1234,我可以写 “w+d+”,也可以写”[a-zA-Z]+d+” ,其中第一个w+会先匹配所有abc1234,然后回溯,匹配满足d+格式。一共4步,而后面这个只需要2步,步骤减少一半了!好了,今天就先到这里,欢迎大家讨论、交流! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |