宝哥软件园

正则表达式断言、断言、正向断言和反向断言简介

编辑:宝哥软件园 来源:互联网 时间:2021-09-30

断言在正则表达式的概念中很难理解,正则表达式通常指的是在目标字符串的当前匹配位置的一个测试,但是这个测试并不占用目标字符串,也就是说它不移动模式在目标字符串中的当前匹配位置。大家可以详细看到正则表达式匹配解析过程的讨论和分析(正则表达式匹配原理),其中提到了很多“零宽度”的元字符,只匹配特殊位置,可以理解为断言。

断言元字符

常见的断言元字符有: b, b, a, z, z,$。它们只代表特殊职位,各自的功能如下:0A1B2。

一行开头的元字符含义(用上面位置的字符串解释),表示0位置$,字符串尾部表示2 b位置的字边界,可以表示:0,2位置b是非字边界,可以表示目标在1 A位置的开始(独立于多行模式)或目标在0 Z位置的结束或在结尾的换行符之前(独立于多行模式)。目标的结尾(独立于多行模式)表示位置2 G,目标中第一个匹配的位置A,Z,Z,G。很少使用这些断言的测试都是基于当前位置的测试,断言也支持更复杂的测试条件。更复杂的断言由子模式表示,包括前瞻断言和后视断言。这些断言只做匹配判断条件,不会记录在匹配结果中,也不会匹配字符。

高级断言、前向断言和前瞻断言。

先行断言通常表示(?=pattern),从当前匹配位置,测试以下匹配字符串是否有效,以及(?模式),我们来看一个例子。来源:“abc100”,正则表达式:/[a-z](?=d )/,我们分析过程如下:

首先,正则表达式字符[a-z]控制,匹配字符是“abc”。位置从“0”开始,变成3。从这个位置测试/d是否有效。匹配字符100,返回true。因此,正则表达式的肯定断言是成功的。返回匹配的字符串“abc”。

(?Pattern)只是一个正匹配,没有成功匹配的时候就会返回true。以下为系统源字符串:abc100,测试结果如下:

后端断言、反向断言和后视断言。

下面一行断言通用表达式是:(?=模式)或(?模式)格式。在正则表达式中,不应该有不定长的量词,因为可能有无限循环。匹配错误。指示匹配的字符将出现在当前位置的左侧,然后返回true,后面的匹配是正常的。因为如果它出现在最左边,默认位置从0开始,匹配失败。一般我们从下面的正则表达式开始匹配,然后一直回溯到匹配。我们来看下面的例子:源字符串:“abc100=”,正则表达式是:“(?= w) w ",匹配过程如下:

首先,正则表达式字符/ w/获得控制权,匹配字符为“abc100”。位置从“0”开始,匹配6个字符。未能从该位置0检测到左变化w匹配。因此,/ w/从字符b开始,匹配到“bc100”,测试左侧有字符“a”,反断言正确。因此,它匹配字符串“bc100”,(?模式),但如果没有匹配,则成功返回true,其他都一样!

后记:从这篇文章中,我们发现搜索特征是从左到右。通常,前向断言被放在正则表达式之后,而后向断言被放在匹配的正则表达式之前。但是,它也可以放在前面或后面。这里就不举例了。欢迎交流讨论!

更多资讯
游戏推荐
更多+