正規表現でどの文字をエスケープする必要がありますか?

正規表現でどの文字をエスケープする必要がありますか?

通常、正規表現でエスケープする必要がある文字は何ですか?

たとえば、次は文法的に正しくありません。

echo '[]' | grep '[]'
grep: Unmatched [ or [^

しかし、はい構文が正しいです。

echo '[]' | grep '\[]'
[]

正規表現でどの文字をエスケープしなければならないのか、どの文字をエスケープしてはならないのかについての文書はありますか?

ベストアンサー1

正規表現にはさまざまな型があり、特殊文字セットは特定の型によって異なります。そのうちのいくつかを以下に説明します。すべての場合において、特殊文字はバックスラッシュでエスケープされます\。たとえば、[あなたが書いたものと一致するように\[。または、^文字(除外)を1つずつ角括弧で囲んでエスケープすることもできます[[]

一部のコンテキストでは、特殊な文字(たとえば、^(子)式の先頭にある文字)は、すべてのコンテキストでエスケープできます。

他の人が書いたように:シェルで式を一重引用符で囲まない場合は、エスケープされた正規表現でシェルの特殊文字をさらにエスケープする必要があります。例:bashなどのBourne互換シェルで'\['作成できます\\["\["、これは別の話です。"\\["

基本正規表現(BRE)

  • POSIX: 基本正規表現
  • 注文する: grepsed
  • 特殊文字:.[\
  • 特に場合によっては:*^$
  • エスケープ文字列:"$(printf '%s' "$string" | sed 's/[.[\*^$]/\\&/g')"

拡張正規表現(ERE)

  • POSIX:拡張正規表現
  • コマンド:grep -Esed -E(以前のGNUバージョンsed -r:)
  • 特殊文字:.[\(
  • 特に場合によっては:*^$+?{|
  • エスケープ文字列:"$(printf '%s' "$string" | sed 's/[.[\(*^$+?{|]/\\&/g')"

おすすめ記事