小猿日记

杀马特。学长 韩版系。学妹 提交于 2020-08-06 01:17:28

公众号

更多精彩内容、活动、程序猿的小故事,欢迎扫码关注公众号
程序编程之旅

概述

本篇介绍了正则表达式引擎
正则表达式的匹配模式
优化正则表达式的三种方式

口水记

在上篇中,提到了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 自动机的优势是

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!