公众号
更多精彩内容、活动、程序猿的小故事,欢迎扫码关注公众号
概述
本篇介绍了正则表达式引擎
正则表达式的匹配模式
优化正则表达式的三种方式
口水记
在上篇中,提到了split方法,这个方法就用到了正则表达式,而正则表达式可能会引起回溯问题。
大量的回溯是会长时间占用CPU,从而带来非常大的系统性能开销。
正则表达式引擎
正则表达式引擎正则表达式是一个用正则符号写出的公式,程序对这个公式进行语法分析,建立一个语法分析树,再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作状态机,也叫状态自动机),用于字符匹配。
而这里的正则表达式引擎就是一套核心算法,用于建立状态机。
目前实现正则表达式引擎的方式有两种:DFA 自动机(Deterministic Final Automaton 确定有限状态自动机)和 NFA 自动机(Non deterministic Finite Automaton 非确定有限状态自动机)。
对比来看,构造 DFA 自动机的代价远大于 NFA 自动机,但 DFA 自动机的执行效率高于 NFA 自动机。假设一个字符串的长度是 n,如果用 DFA 自动机作为正则表达式引擎,则匹配的时间复杂度为 O(n);
如果用 NFA 自动机作为正则表达式引擎,由于 NFA 自动机在匹配过程中存在大量的分支和回溯,假设 NFA 的状态数为 s,则该匹配算法的时间复杂度为 O(ns)。NFA 自动机的优势是
来源:oschina
链接:https://my.oschina.net/u/4366862/blog/4437761