性能优化——慎重使用正则表达式

什么是正则表达式?


正则表达式是计算机科学的一个概念,很多语言都实现了它。正则表达式使用一些特定的元
字符来检索、匹配以及替换符合规则的字符串。


构造正则表达式语法的元字符,由普通字符、标准字符、限定字符(量词)、定位字符(边
界字符)组成。详情可见下图:


正则表达式引擎


正则表达式是一个用正则符号写出的公式,程序对这个公式进行语法分析,建立一个语法分
析树,再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作
状态机,也叫状态自动机),用于字符匹配。


而这里的正则表达式引擎就是一套核心算法,用于建立状态机。


目前实现正则表达式引擎的方式有两种:DFA 自动机(Deterministic Final Automata 确
定有限状态自动机)和 NFA 自动机(Non deterministic Finite Automaton 非确定有限
状态自动机)。


对比来看,构造 DFA 自动机的代价远大于 NFA 自动机,但 DFA 自动机的执行效率高于
NFA 自动机。


假设一个字符串的长度是 n,如果用 DFA 自动机作为正则表达式引擎,则匹配的时间复杂
度为 O(n);如果用 NFA 自动机作为正则表达式引擎,由于 NFA 自动机在匹配过程中存在
大量的

猜你喜欢

转载自blog.csdn.net/qq_36589864/article/details/107951255