正規表現では、一部の文字は、適切に配置された場合にのみメタ文字の特別な意味を取得し、それ以外の場合は文字通りの意味を維持します。たとえば、文字は角括弧式内に配置され、文字通りダッシュの外側にある-
場合にのみメタ文字として扱われます。[]
しかし、個人的には、メタ文字を予約文字と同じように考え、リテラルである必要があるすべてのメタ文字をエスケープするという厳密なルールを採用するのが好きです。これにより、メタ文字が正規表現のどこにあるかを検討するために費やされる時間を少し節約できます。
しかし、私が知っていることから、そのような文字をエスケープすることは通常、GNUBREのエラーです。そしてこの正規表現
foo\-[0-9]+
\-
RegexBuddyによってその部分が無効と見なされます。さらに、RegexBuddyは、GNU EREで同じエラーを示します(PCREではありません)。一方、grep
Ubuntuでは、この正規表現はエラーとして扱われず、grep
デフォルトでEREを使用することになっているにもかかわらず、私のテストでは正常に機能します。
したがって、BREとRegexBuddyを脇に置いて、現在の多くのシステムとプログラミング言語で使用されているPCREとEREだけを考えると、問題は、文字通りの意味を得るためにすべての可能なメタ文字をエスケープすることに慣れることがどれほど間違っているかということです。