全面分析Linux正則表達式(五)
在前面幾篇文章中,我們介紹了Linux正則表達式的子模式,逆向引用和量詞,在這篇文章里,我們將重點介紹正則表達式中的斷言(Assertions)。 Linux正則表達式斷言可能開始理解起來有些困難,我們應該加以重點分析。
斷言(Assertions)
斷言(Assertions)是在目標字符串的當前匹配位置進行的一種測試但這種測試并不占用目標字符串,也即不會移動模式在目標字符串中的當前匹配位置。
讀起來似乎有點拗口,我們還是舉幾個簡單的例子。
兩個最常見的斷言是元字符“^”和“$”,它們檢查匹配模式是否出現在行首或行尾。
我們來看這個模式/^\d\d\d$/,試著用它來匹配目標字符串“123”。“\d\d\d”表示三個數字字符,匹配了目標字符串的三個字符,而模式中的^和$分別表示這三個字符同時出現在行首和行尾,而它們本身并不與目標字符串中的任何字符相對應。
其它還有一些簡單的斷言\b, \B, \A, \Z, \z,它們都以反斜線開頭,前面我們已經介紹過反斜線的這個用法。這幾個斷言的含義如下表。
斷言 含義
\b 字分界線
\B 非字分界線
\A 目標的開頭(獨立于多行模式)
\Z 目標的結尾或位于結尾的換行符前(獨立于多行模式)
\z 目標的結尾(獨立于多行模式)
\G 目標中的第一個匹配位置
注意這些斷言不能出現在字符類中,如果出現了也是其它的含義,例如\b在字符類中表示反斜線字?
【編輯推薦】