次の正規表現を使用すると、エスケープは[{-]
必要ないようです{
。そうですか?角かっこ式でエスケープする必要がない他の文字は何ですか?
答え1
数十の異なる正規表現タイプがあることに注意してください。 POSIX規格は、少なくとも4つ(BRE、ERE、awk ERE、ex
/ vi
BRE)、およびperl
PCREvim
などのより多くの項目を指定します。ksh93
存在するPOSIX BRE(grep
/で使用sed
)とむしろgrep -E
(/sed -E
またはbash
1で使用[[ =~ ]]
)、内部角かっこ表現([...]
)、唯一の特殊文字は^
(最初の文字の場合)、 ]
(最初の文字または次の文字以外の場合]
)、-
(最初の文字、最後の文字または次の文字以外の場合^
)、および一部、、...が[
改行文字の一部です。ケースです。 、それ自体では特別ではなくても、正規表現構文の正規表現は、正規表現を区切るなど、正規表現を使用するユーティリティで特別な場合が多いです。[.x.]
[:class:]
[=e=]
grep
\
これは特別ではなく、理論的に文字をエスケープしたり、\t
TABなどを指定したりするためには使用できません。
[\-~]
\
からまでのさまざまな文字と一致するように設計されています~
。-
またはを一致させるには、またはを~
使用します。必要が最初に来るか、最後に来て、必要が最初に来て、後ろまたは後に続いてはいけないことを忘れないでください。[~-]
[-~]
-
]
[
.
=
:
{
それは決して特別ではありませんが-
、あなたのように最後の位置にいるときはそうではありません。
[\t]
BREとEREは合計一致またはが必要ですが、複数の[t\]
ユーティリティがその要件を無視するため、これに依存しません。 orを一致させるには、orを使用してください。\
t
[\\t]
[\\t]
\
t
たとえば、GNUでは、sed
その環境を除いて代わりにsed 's/[\t]//'
TABを削除します。\
t
$POSIXLY_CORRECT
¹興味深いことに、引用されたようにtrueをbash
返すために使用され、正規表現はエスケープを必要としないエスケープポイントを試みるため、正規表現エンジンを呼び出し、4.4はまだ同じ理由でtrueを返しません。[[ '\' =~ ['.'] ]]
.
[\.]
[[ '\' =~ [^]'.'] ]]