正则表达式引擎浅析

开发 后端
了解正则表达式引擎的是我们基本的要求,只有掌握了正则表达式引擎的原理,那么我们才能做好正则表达式的使用,本文就向你介绍相关的内容。

正则表达式引擎的内部工作机制是什么呢?我们有的时候会碰到当使用正则表达式的时候很多的结果并不是我们想要的,那么其原因是什么呢?那么这里就会给你一个答案:

了解正则表达式引擎的必要性:

知道正则表达式引擎是如何工作的有助于你很快理解为何某个正则表达式不像你期望的那样工作。

正则表达式引擎的种类:

有两种类型的引擎:文本导向(text-directed)的引擎和正则导向(regex-directed)的引擎。Jeffrey Friedl把他们称作DFA和NFA引擎。本文谈到的是正则导向的引擎。这是因为一些非常有用的特性,如“惰性”量词(lazy quantifiers)和反向引用(backreferences),只能在正则导向的引擎中实现。所以毫不意外这种引擎是目前***的引擎。

你可以轻易分辨出所使用的引擎是文本导向还是正则导向。如果反向引用或“惰性”量词被实现,则可以肯定你使用的引擎是正则导向的。你可以作如下测试:将正则表达式<<regex|regex not>>应用到字符串“regex not”。如果匹配的结果是regex,则引擎是正则导向的。如果结果是regex not,则是文本导向的。因为正则导向的引擎是“猴急”的,它会很急切的进行表功,报告它找到的***个匹配 。

正则表达式引擎的小小总结:

正则导向的引擎总是返回最左边的匹配,这是需要你理解的很重要的一点:即使以后有可能发现一个“更好”的匹配,正则导向的引擎也总是返回最左边的匹配。

当把<<cat>>应用到“He captured a catfish for his cat”,引擎先比较<<c>>和“H”,结果失败了。于是引擎再比较<<c>>和“e”,也失败了。直到第四个字符,<<c>>匹配了“c”。<<a>>匹配了第五个字符。到第六个字符<<t>>没能匹配“p”,也失败了。引擎再继续从第五个字符重新检查匹配性。直到第十五个字符开始,<<cat>>匹配上了“catfish”中的“cat”,正则表达式引擎急切的返回***个匹配的结果,而不会再继续查找是否有其他更好的匹配。

正则表达式引擎的相关内容就向你介绍到这里,希望你对正则表达式引擎有所了解。

【编辑推荐】

  1. 浅析PHP正则表达式的应用实例
  2. 正则表达式匹配实例详解
  3. 正则表达式匹配数字实例解析
  4. 正则表达式匹配字符串实现详解
  5. 正则表达式入门必学的星星点点
责任编辑:仲衡 来源: 互联网
相关推荐

2010-07-19 10:40:16

Perl正则表达式

2009-08-07 15:16:10

C#正则表达式

2009-08-20 16:13:32

C#正则表达式匹配

2009-09-16 11:17:12

PHP正则表达式定位字

2009-09-16 15:45:56

email的正则表达式

2009-08-20 15:06:51

C#正则表达式

2009-08-20 14:57:00

C#正则表达式

2009-08-20 15:10:33

C#正则表达式

2009-08-20 15:02:41

C#正则表达式

2009-09-16 16:01:57

PHP正则表达式正则表达式的应用

2009-08-20 14:43:03

C#正则表达式Rege

2009-09-16 10:43:22

PHP正则表达式函数

2009-09-16 13:24:30

PHP正则表达式匹配

2009-09-16 18:03:05

Java正则表达式正则表达式实现

2009-08-20 13:09:28

C#正则表达式

2009-08-13 15:02:52

C#正则表达式引擎贪婪

2018-09-27 15:25:08

正则表达式前端

2020-09-04 09:16:04

Python正则表达式虚拟机

2009-09-16 12:41:42

Perl正则表达式

2009-08-20 13:57:27

C#正则表达式
点赞
收藏

51CTO技术栈公众号