在前面几篇文章中,我们介绍了Linux正则表达式的子模式,逆向引用和量词,在这篇文章里,我们将重点介绍正则表达式中的断言(Assertions)。 Linux正则表达式断言可能开始理解起来有些困难,我们应该加以重点分析。
断言(Assertions)
断言(Assertions)是在目标字符串的当前匹配位置进行的一种测试但这种测试并不占用目标字符串,也即不会移动模式在目标字符串中的当前匹配位置。
读起来似乎有点拗口,我们还是举几个简单的例子。
两个最常见的断言是元字符“^”和“$”,它们检查匹配模式是否出现在行首或行尾。
我们来看这个模式/^/d/d/d$/,试着用它来匹配目标字符串“123”。“/d/d/d”表示三个数字字符,匹配了目标字符串的三个字符,而模式中的^和$分别表示这三个字符同时出现在行首和行尾,而它们本身并不与目标字符串中的任何字符相对应。
其它还有一些简单的断言/b, /B, /A, /Z, /z,它们都以反斜线开头,前面我们已经介绍过反斜线的这个用法。这几个断言的含义如下表。
断言 含义
/b 字分界线
/B 非字分界线
/A 目标的开头(独立于多行模式)
/Z 目标的结尾或位于结尾的换行符前(独立于多行模式)
/z 目标的结尾(独立于多行模式)
/G 目标中的第一个匹配位置
注意这些断言不能出现在字符类中,如果出现了也是其它的含义,例如/b在字符类中表示反斜线字?