快速開始
教學
工具和語言
範例
參考
書籍評論
替換文字教學
簡介
字元
不可列印字元
匹配文字
反向參照
匹配內容
大小寫轉換
條件
更多本網站資訊
簡介
正規表示式快速開始
正規表示式教學
替換字串教學
應用程式和語言
正規表示式範例
正規表示式參考
替換字串參考
書籍評論
可列印 PDF
關於本網站
RSS 資訊和部落格

特殊字元

最基本的替換字串僅包含字面字元。替換 replacement 僅以文字 replacement 替換每個正規表示式匹配項。

由於我們希望能夠做的事不只是以完全相同的文字替換每個正規表示式匹配項,因此我們需要保留特定字元以供特殊用途。在大部分的替換文字風格中,兩個字元往往具有特殊含義:反斜線 \ 和美元符號 $。是否以及如何跳脫這些字元取決於您所使用的應用程式。在某些應用程式中,當您想要將這些字元用作字面字元時,您總是需要跳脫它們。在其他應用程式中,您僅需要在這些字元與後面的字元形成替換文字代碼時才跳脫它們。

JGsoft 風格Delphi 中,您可以使用反斜線跳脫反斜線和美元符號,並且可以使用美元符號跳脫美元符號。 \\ 以字面反斜線替換,而 \$$$ 以字面美元符號替換。您僅需要跳脫它們以抑制它們與其他字元組合時的特殊含義。在 \!$! 中,反斜線和美元符號是字面字元,因為它們與驚嘆號組合時沒有特殊含義。您無法跳脫驚嘆號或任何其他字元,也不需要這麼做,因為它們在 JGsoft 和 Delphi 替換字串中沒有特殊含義。

.NETJavaScriptVBScriptXRegExpPCRE2std::regex 中,你可以使用另一個美元符號來跳脫美元符號。 $$ 會替換成一個字面美元符號。XRegExp 和 PCRE2 要求你跳脫所有字面美元符號。它們將未跳脫且未形成有效替換文字代碼的美元符號視為錯誤。在 .NET、JavaScript(不含 XRegExp)和 VBScript 中,你只需要跳脫美元符號,就能抑制它與其他字元組合時的特殊意義。在 $\$! 中,美元符號是一個字面字元,因為它與反斜線或驚嘆號組合時沒有特殊意義。你無法且不需要跳脫反斜線、驚嘆號或任何其他字元(美元符號除外),因為它們在 .NET、JavaScript、VBScript 和 PCRE2 替換字串中沒有特殊意義。

Java 中,未跳脫且未形成代碼的美元符號會產生錯誤。你必須使用反斜線或另一個美元符號來跳脫美元符號,才能將它用作字面字元。 $! 會產生錯誤,因為美元符號未跳脫,且與驚嘆號組合時沒有特殊意義。反斜線總是會跳脫後面的字元。 \! 會替換成一個字面驚嘆號,而 \\ 會替換成一個單一反斜線。替換文字結尾的單一反斜線會產生錯誤。

PythonRuby 中,美元符號沒有特殊意義。你可以使用反斜線來跳脫反斜線。你只需要跳脫反斜線,就能抑制它與其他字元組合時的特殊意義。在 \! 中,反斜線是一個字面字元,因為它與驚嘆號組合時沒有特殊意義。你無法且不需要跳脫驚嘆號或任何其他字元(反斜線除外),因為它們在 Python 和 Ruby 替換字串中沒有特殊意義。不過,替換文字結尾的未跳脫反斜線在 Python 中會產生錯誤,在 Ruby 中則會變成一個字面反斜線。

PHP 的 preg_replace 中,你可以使用反斜線來跳脫反斜線和美元符號。 \\ 會替換成一個字面反斜線,而 \$ 會替換成一個字面美元符號。你只需要跳脫它們,就能抑制它們與其他字元組合時的特殊意義。在 \! 中,反斜線是一個字面字元,因為它與驚嘆號組合時沒有特殊意義。你無法且不需要跳脫驚嘆號或任何其他字元(反斜線和美元符號除外),因為它們在 PHP 替換字串中沒有特殊意義。

Boost 中,反斜線總是跳脫後面的字元。\! 以一個字面上的驚嘆號取代,而 \\ 以一個單一的反斜線取代。取代文字結尾的單一反斜線會被忽略。未跳脫的美元符號是一個字面上的美元符號,如果它沒有形成一個取代字串的記號。你可以用反斜線或另一個美元符號來跳脫美元符號。因此 $$$\$ 都以一個單一的美元符號取代。

R 中,美元符號沒有特殊意義。反斜線總是跳脫後面的字元。\! 以一個字面上的驚嘆號取代,而 \\ 以一個單一的反斜線取代。取代文字結尾的單一反斜線會被忽略。

Tcl 中,連字元 & 有特殊意義,如果你想要在取代文字中有一個字面上的連字元,就必須用反斜線跳脫它。你可以用反斜線來跳脫反斜線。你只需要跳脫反斜線,以抑制它與其他字元組合時所具有的特殊意義。在 \! 中,反斜線是一個字面上的字元,因為它與驚嘆號組合時沒有特殊意義。你不能也不需要跳脫驚嘆號或任何其他字元,除了反斜線和連字元之外,因為它們在 Tcl 取代字串中沒有特殊意義。取代文字結尾的未跳脫反斜線是一個字面上的反斜線。

XPath 中,未跳脫的反斜線是一個錯誤。未跳脫且沒有形成記號的美元符號也是一個錯誤。你必須用反斜線跳脫反斜線和美元符號,才能將它們用作字面上的字元。反斜線沒有其他特殊意義,除了跳脫另一個反斜線或美元符號。

Perl 是個特例。Perl 沒有真正的替換文字語法。因此,它也沒有替換文字的跳脫規則。在 Perl 原始碼中,替換字串只是雙引號字串。反向參照在替換文字中看起來像,實際上是內插變數。您可以在正規運算式配對後,在任何其他雙引號字串中內插它們,即使不執行搜尋和替換。

特殊字元和程式語言

前一節的規則說明了這些程式語言中的搜尋和替換函式如何剖析替換文字。如果您的應用程式從使用者輸入接收替換文字,則您的應用程式的使用者必須遵循這些跳脫規則,而且只能遵循這些規則。您可能會驚訝地發現單引號和雙引號等字元並非特殊字元。這是正確的。當使用 正規運算式或 grep 工具(例如 PowerGREP 或 文字編輯器(例如 EditPad Pro)的搜尋和替換函式)時,您不應該像在程式語言中那樣跳脫或重複引號字元。

如果您在原始碼中將替換文字指定為字串常數,則必須記住程式語言在字串常數中對哪些字元進行特殊處理。這是因為這些字元是由編譯器處理的,在替換文字函式看到字串之前。例如,Java 要用單一美元符號替換所有正規運算式配對,您需要使用替換文字 \$,您需要在原始碼中輸入 "\\$"。Java 編譯器將原始碼中的跳脫反斜線轉換為傳遞給 replaceAll() 函式的字串中的單一反斜線。然後,該函式將單一反斜線和美元符號視為跳脫的美元符號。

請參閱本網站的 工具和語言 部分,以瞭解有關如何在各種程式語言中使用替換字串的更多資訊。

| 快速開始 | 教學 | 工具和語言 | 範例 | 參考 | 書籍評論 |

| 簡介 | 字元 | 不可列印字元 | 配對文字 | 反向參照 | 配對內容 | 大小寫轉換 | 條件 |