Perl为正规表达式定义一致性扩展语句,比如注释,聚类,植入改造,和零边界的论断。
在前和在后的论断有大概四个可能的积极的和消极的组合,积极的向前,消极的向前,积极的向后,和消极的向后。这些都允许你测试文本的存在和不存在,这些文本都符合一个普通的表达式,这个表达式并不消耗这个文本。
积极和消极的前缀处理存在或者不存在的文本,这个文本环绕一个特殊的样式。向前或者向后意味着这个测试是否在文本中向前向后。
比如,为了检测三个数字它们在一个或多个数字之后,比如,当你插入一个逗号,使用一个积极的断言。这个测试中至少有一个单个。在这3个数字中每个数字后重复使用逗号来完成测试。
记住,向前或者向后断言是零边界,这就意味着在断言中的样式不是匹配文本中的一部分。比如,$&--or $MATCH,在英语角度来说不包含断言中的样式。
看看下面的代码:
$text = "this or that or the other";
$text =~ /(?<=that )or/i;
print "Before: '$`', Matched: '$&', After: '$'' ";
注意单词that和被拖拽的空间不是匹配文本的一部分。取而代之的是在前面匹配的文本的一部分。
Perl支持下面的断言:
(?=pattern) # zero-width positive look ahead
(?!pattern) # zero-width negative look ahead
(?<=pattern) # zero-width positive look behind
(?
下面有些例子解释四个向前或者向后的断言:
·/w+(?=s)/:积极向前:这个形式匹配一个或者多个被空白字符紧跟的单词字符,但是其中并不包括匹配形式的空白字符。
·/d(?!d)/:消极向前:这个形式严格的匹配三个数字被其他非数字的字符紧跟的形式。这个不消耗非数字。
·/(?<=-)d/:积极向后:这个形式匹配四个数字,这四个数字由dash领先。Dash不是在匹配字符中被捕获的。
·/(?