通常、正規表現でエスケープする必要がある文字は何ですか?
たとえば、次は文法的に正しくありません。
echo '[]' | grep '[]'
grep: Unmatched [ or [^
しかし、はい構文が正しいです。
echo '[]' | grep '\[]'
[]
正規表現でどの文字をエスケープしなければならないのか、どの文字をエスケープしてはならないのかについての文書はありますか?
ベストアンサー1
正規表現にはさまざまな型があり、特殊文字セットは特定の型によって異なります。そのうちのいくつかを以下に説明します。すべての場合において、特殊文字はバックスラッシュでエスケープされます\
。たとえば、[
あなたが書いたものと一致するように\[
。または、^
文字(除外)を1つずつ角括弧で囲んでエスケープすることもできます[[]
。
一部のコンテキストでは、特殊な文字(たとえば、^
(子)式の先頭にある文字)は、すべてのコンテキストでエスケープできます。
他の人が書いたように:シェルで式を一重引用符で囲まない場合は、エスケープされた正規表現でシェルの特殊文字をさらにエスケープする必要があります。例:bashなどのBourne互換シェルで'\['
作成できます\\[
が"\["
、これは別の話です。"\\["
基本正規表現(BRE)
- POSIX: 基本正規表現
- 注文する:
grep
、sed
- 特殊文字:
.[\
- 特に場合によっては:
*^$
- エスケープ文字列:
"$(printf '%s' "$string" | sed 's/[.[\*^$]/\\&/g')"
拡張正規表現(ERE)
- POSIX:拡張正規表現
- コマンド:
grep -E
、sed -E
(以前のGNUバージョンsed -r
:) - 特殊文字:
.[\(
- 特に場合によっては:
*^$+?{|
- エスケープ文字列:
"$(printf '%s' "$string" | sed 's/[.[\(*^$+?{|]/\\&/g')"