Yueseryueser.com

← ガイド一覧

正規表現のエスケープを解除する方法:a\.b の読み方

人から渡された正規表現や、ログに残ったエスケープ済みの検索語は、a\.b や \[test\] のような形で読みにくいものです。エスケープを外せば、何に一致させたかったのかが見えます。

ツールを開く:正規表現のエスケープ解除

バックスラッシュを外したい場面

引き継いだコードや設定の正規表現は、どこかからコピーされたものが多く、バックスラッシュが大量に付いています。何を探しているのかを判断するには、普通の文字列に戻したほうが、頭の中で 1 文字ずつ変換するより速く、階層を読み違えません。

もう一つは比較です。ログにはエスケープされた検索語が残り、利用者は元の表記を報告します。両方の見た目が揃うまで、同じ語かどうかを確かめられません。解除して並べれば、違いがどこにあるか分かります。

外すのは 14 文字の前のバックスラッシュだけ

対象は決まった一覧です。ピリオド、アスタリスク、プラス、疑問符、キャレット、ドル記号、中括弧、丸括弧、縦棒、角括弧、そしてバックスラッシュ自身です。これらの直前にあるバックスラッシュだけを外し、それ以外はそのまま残します。

そのため \d、\w、\s、\n は変化しません。これらは「バックスラッシュ + 対象文字」の組み合わせではないからです。逆にバックスラッシュ 2 つは 1 つに戻ります。バックスラッシュ自身も一覧に含まれるためです。

解除後にパターンとして使えない理由

バックスラッシュを外すと、守られていた文字が再び特別な意味を持ちます。a\.b は a.b になり、点が任意の文字に一致するため、そのままパターンにすると元とは違う結果になります。一致させたい場合は元の版を残すか、もう一度エスケープしてください。

パスやコードでは誤って削除されることもあります。C:\dir\*.txt のような文字列では \* が不要なエスケープと見なされて消え、パスの意味が変わります。処理前に元を控え、結果と比べてから採用してください。

よくある質問

解除した文字列をそのまま正規表現に使えますか?

使えません。バックスラッシュを外すと、エスケープされていた文字が再び特別な意味を持ち、元のパターンとは違うものに一致します。一致させたい場合は元の版を残すか、解除した文字列をもう一度エスケープしてください。

\d や \n が変わらないのはなぜですか?

一覧に含まれていないからです。外すのは 14 の特殊文字の前のバックスラッシュだけで、d、w、s、n はそこに入りません。\d のような並びは正規表現の文法の一部で、余分なエスケープではありません。

\u4e2d のような表記は元に戻せますか?

戻せません。これは Unicode のエスケープシーケンスで、u は 14 文字の一覧にないため、そのまま残ります。この種の符号化を戻すには、エスケープシーケンスを解釈できるツールや言語のデコード関数が必要です。

関連ツール:正規表現のエスケープ解除