如何高效编写正则表达式以提升性能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计818个文字,预计阅读时间需要4分钟。
这里讨论的是正则表达式的优化,主要针对NFA模式正则表达式。详细内容可参考:正则表达式匹配解析探讨分析(正则表达式匹配原理)。
这里说的正则表达式优化,主要是针对目前常用的NFA模式正则表达式,详细可以参考:正则表达式匹配解析过程探讨分析(正则表达式匹配原理)。从上面例子,我们可以推断出,影响NFA类正则表达式(常见语言:GNU Emacs,Java,ergp,less,more,.NET语言,
PCRE library,Perl,PHP,Python,Ruby,sed,vi )其实主要是它的“回溯”,减少“回溯”次数(减少循环查找同一个字符次数),是提高性能的主要方法。 我们来看个例子:
源字符串:<script type="text/javascript">adsfadfsdasfsdafdsfsadfsa</script>
匹配要求,匹配<script….>….</script>标签里面所有内容,包括改标签
常见写法(1),因为<script后面可能出现字符、空白、特殊符号等,还有标签里面也可能出现各种js代码。我们简单方法是:
正则表达式:<script.*?>.*?</script> (测试工具使用了:regexBuddy)
总共花费115步,回溯了:48次。 因为我们使用”.”字符,匹配默认情况下除了\n之外所有字符。
本文共计818个文字,预计阅读时间需要4分钟。
这里讨论的是正则表达式的优化,主要针对NFA模式正则表达式。详细内容可参考:正则表达式匹配解析探讨分析(正则表达式匹配原理)。
这里说的正则表达式优化,主要是针对目前常用的NFA模式正则表达式,详细可以参考:正则表达式匹配解析过程探讨分析(正则表达式匹配原理)。从上面例子,我们可以推断出,影响NFA类正则表达式(常见语言:GNU Emacs,Java,ergp,less,more,.NET语言,
PCRE library,Perl,PHP,Python,Ruby,sed,vi )其实主要是它的“回溯”,减少“回溯”次数(减少循环查找同一个字符次数),是提高性能的主要方法。 我们来看个例子:
源字符串:<script type="text/javascript">adsfadfsdasfsdafdsfsadfsa</script>
匹配要求,匹配<script….>….</script>标签里面所有内容,包括改标签
常见写法(1),因为<script后面可能出现字符、空白、特殊符号等,还有标签里面也可能出现各种js代码。我们简单方法是:
正则表达式:<script.*?>.*?</script> (测试工具使用了:regexBuddy)
总共花费115步,回溯了:48次。 因为我们使用”.”字符,匹配默认情况下除了\n之外所有字符。

