需要轉義哪些字元

字元轉義允許在輸入字串中逐字搜尋並找到某些字元(由正規表示式引擎保留用於操作搜尋)。轉義取決於上下文,因此此示例不包括字串分隔符轉義。

反斜槓

說反斜槓是轉義字元有點誤導。反斜槓轉義和反斜槓帶來; 它實際上會開啟或關閉元字元與前面字元的字面狀態。

為了在正規表示式中的任何地方使用字面反斜槓,它必須通過另一個反斜槓進行轉義。

轉義(外部角色類)

有幾個字元需要轉義才能按字面意思(至少在 char 類之外):

  • 括號:[]
  • 括號:()
  • 捲曲括號:{}
  • 經營者:*+?|
  • 主播:^$
  • 其他:.\
  • 為了在開頭使用文字^或在正規表示式結尾使用文字 $,必須轉義該字元。
  • 有些風味只在分別位於正規表示式的開頭或結尾時才使用^$ 作為元字元。在這些口味中,不需要額外的轉義。無論如何,通常最好轉義它們。

在字元類中轉義

  • 當它們在 char 類中作為文字出現時,最好使用方括號([])。在某些條件下,根據風味的不同 ,它不是必需的 ,但它會損害可讀性。
  • 插入符號^是一個元字元,當作為 char 類中的第一個字元時:[^aeiou]。char 類中的任何其他位置,它只是一個字面字元。
  • 破折號 - 是一個元字元,除非它位於字元類的開頭或結尾。如果 char 類中的第一個字元是插入符號^,那麼如果它是 char 類中的第二個字元,它將是一個文字。

轉義更換

在替換內也有轉義規則,但上述規則均不適用。唯一的元字元是 $\,至少當 $ 可用於引用捕獲組時(如第 1 組的 $1)。要使用文字 $,請轉義它:\$5.00。同樣\C:\\Program Files\\

BRE 例外

雖然 ERE(擴充套件正規表示式)反映了典型的 Perl 風格語法,但 BRE(基本正規表示式)在轉義時有很大差異:

  • 有不同的簡寫語法。所有的\d\s\w 等都消失了。相反,它有自己的語法(POSIX 令人困惑地稱之為字元類),如 [:digit:]。這些結構必須在字元類中。
  • 可以正常使用的元字元(.*^$)很少。所有其他元字元必須以不同方式進行轉義:

大括號 {}

  • a{1,2} 匹配 a{1,2}。要匹配 aaa,請使用 a\{1,2\}

括號 ()

  • (ab)\1 無效,因為沒有捕獲組 1.要修復它並匹配 abab 使用\(ab\)\1

反斜槓

  • 在 char 類中(在 POSIX 中稱為括號表示式),反斜槓不是元字元(並且不需要轉義)。[\d] 匹配\d
  • 在其他地方,像往常一樣轉義。

其他

  • +? 是文字。如果 BRE 引擎支援它們作為元字元,則它們必須作為\?\+進行轉義。