需要轉義哪些字元
字元轉義允許在輸入字串中逐字搜尋並找到某些字元(由正規表示式引擎保留用於操作搜尋)。轉義取決於上下文,因此此示例不包括字串或分隔符轉義。
反斜槓
說反斜槓是轉義字元有點誤導。反斜槓轉義和反斜槓帶來; 它實際上會開啟或關閉元字元與前面字元的字面狀態。
為了在正規表示式中的任何地方使用字面反斜槓,它必須通過另一個反斜槓進行轉義。
轉義(外部角色類)
有幾個字元需要轉義才能按字面意思(至少在 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}。要匹配a或aa,請使用a\{1,2\}
括號 ()
(ab)\1無效,因為沒有捕獲組 1.要修復它並匹配abab使用\(ab\)\1
反斜槓
- 在 char 類中(在 POSIX 中稱為括號表示式),反斜槓不是元字元(並且不需要轉義)。
[\d]匹配\或d。 - 在其他地方,像往常一樣轉義。
其他
+和?是文字。如果 BRE 引擎支援它們作為元字元,則它們必須作為\?和\+進行轉義。