[解決済み] 正規表現でエスケープしなければならない特殊文字は何ですか?
質問
のような特殊文字をエスケープすべきかどうか、いつも試行錯誤で疲れてしまいます。
()[]{}|
正規表現の多くの実装を使用する場合、'など。
例えば、Python, sed, grep, awk, Perl, rename, Apache, find などでは違います。 特殊文字をいつエスケープして、いつエスケープしないかというルールセットはあるのでしょうか?PCRE、POSIX、拡張正規表現など、正規表現の種類に依存するのでしょうか?
どのように解決するのですか?
どの文字をエスケープして、どの文字をエスケープしないかは、使用する正規表現に依存します。
PCRE、および他のほとんどのいわゆるPerl互換フレーバーでは、これらの外部文字クラスをエスケープしてください。
.^$*+?()[{\|
と、これらは文字クラスの内部です。
^-]\
POSIX 拡張正規表現(ERE)では、これらの外側の文字クラスをエスケープします(PCRE と同じです)。
.^$*+?()[{\|
それ以外の文字をエスケープするとPOSIX EREでエラーになります。
文字クラスの内部では、バックスラッシュはPOSIX正規表現におけるリテラル文字です。 これを使用して何かをエスケープすることはできません。 文字クラスのメタキャラクタをリテラルとして含めたい場合は、"賢い配置"を使用する必要があります。 文字クラスの先頭以外の場所に^を、先頭に[]を、そして先頭または末尾に-を置くと、これらに文字通りマッチします(例)。
[]^-]
POSIX基本正規表現(BRE)では、メタキャラクタであり、エスケープすることで意味を抑制する必要があります。
.^$*[\
BRE の括弧や中括弧をエスケープすると、ERE のエスケープされていないバージョンと同じ意味になります。 GNU などの実装では、他の文字もエスケープすると特別な意味を持ちます。 .^$*(){} 以外の文字をエスケープすると、通常BREではエラーになります。
文字クラスの内部では、BRE は ERE と同じ規則に従います。
もし、これだけで頭が混乱するようなら、次の本を手に取ってみてください。 RegexBuddy . 作成]タブで[トークンの挿入]、[リテラル]の順にクリックします。 RegexBuddy は必要に応じてエスケープを追加します。
関連
-
[解決済み] URLにセミコロンが含まれていても、有効なのでしょうか?
-
[解決済み] (grep) 非 ASCII 文字にマッチする正規表現ですか?
-
[解決済み] Kibanaクエリの完全一致
-
[解決済み] SQLite のクエリで正規表現を使うにはどうしたらいいですか?
-
[解決済み] 正規表現[^ΘdΘs]と[ΘdΘs]の違いは何ですか?
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] 正規表現で「この文字列までなら何でもあり」にマッチさせるには?
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] 正規表現における「lazy」「greedy」の意味とは?
-
[解決済み] jQueryセレクタの正規表現
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Vimで正規表現に置換すると、`E488: Trailing characters`が発生します。
-
[解決済み] Regex オプション文字にマッチさせる方法
-
[解決済み] URLにセミコロンが含まれていても、有効なのでしょうか?
-
[解決済み] 正規表現の主題文字列で空白を無視するには?
-
[解決済み] sedで非欲張り(消極的)な正規表現マッチング?
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] 正規表現 AND 演算子
-
[解決済み] 正規表現 - Gmailアドレスの検証
-
[解決済み] 一致した正規表現パターンを awk で表示するには?
-
[解決済み] 正規表現全体を否定するには?