正则表达式-1.原理理解

来源:互联网 发布:centos ftp开启文件夹 编辑:程序博客网 时间:2024/06/08 13:44

 正则表达式(regular expression 简称 regex)是一种工具,是为了解决某一类专门的问题而发明,是用来匹配和处理文本的字符串。

一.正则表达式的核心是正则表达式引擎处理方式。

  一般正则表达式引擎分为两种:NFA和DFA。 

但其中的NFA又有两个分支:传统的NFA和POSIX NFA 以下是各种语言所支持的引擎: 


传统NFA:GNU Emacs、java、grep、less、more、.NET、Perl、PHP、Python、Ruby、sed等 
DFA:awk、egrep、flex、MySQL、Procmail 
POSIX NFA:mawk、Mortice Kern等等。 
DFA/NFA混合引擎:GNU awk 、GNU grep/egrep、Tcl 

一般DFA速度较快,而NFA的控制能力较强



DFA引擎因为不需要回溯,所以匹配快速,但不支持捕获组,所以也就不支持反向引用和$number这种引用方式.


大多数语言和工具使用的是传统型的NFA引擎,它有一些DFA不支持的特性:

  捕获组、反向引用和$number引用方式;

  环视(Lookaround,(?<=…)、(?<!…)、(?=…)、(?!…)),或者有的有文章叫做预搜索;

  忽略优化量词(??、*?、+?、{m,n}?、{m,}?),或者有的文章叫做非贪婪模式;

  占有优先量词(?+、*+、++、{m,n}+、{m,}+,目前仅Java和PCRE支持),固化分组(?>…)。



二.正则处理大体有四步


第一:编译,当你创建了一个正则对象 浏览器会把它转化为一个原生代码,用于执行匹配工作
第二:设置起始位置。当正则类进入实用状态,首先要确定目标字符串的起始搜索位置
第三:匹配每个正则表达式字元。一旦正则表达式知道开始位置,他会逐个检查文本和正则表达式模式。当一个特定的字元匹配失败时,正则会试着回朔到之前尝试匹配的位置               上,然后尝试其他可能的路径
第四:宣布匹配成功或失败


0 0
原创粉丝点击