需要轉義哪些字元
字元轉義允許在輸入字串中逐字搜尋並找到某些字元(由正規表示式引擎保留用於操作搜尋)。轉義取決於上下文,因此此示例不包括字串或分隔符轉義。
反斜槓
說反斜槓是轉義字元有點誤導。反斜槓轉義和反斜槓帶來; 它實際上會開啟或關閉元字元與前面字元的字面狀態。
為了在正規表示式中的任何地方使用字面反斜槓,它必須通過另一個反斜槓進行轉義。
轉義(外部角色類)
有幾個字元需要轉義才能按字面意思(至少在 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 引擎支援它們作為元字元,則它們必須作為\?
和\+
進行轉義。