web-dev-qa-db-ja.com

正規表現でのスラッシュのエスケープ

私の質問は簡単なもので、正規表現のエスケープに関するものです。正規表現でスラッシュ/をエスケープする必要がありますか?そして、あなたはそれをどのようにやりますか?

93
Zerobu

どのようなコンテキスト/言語ですか?一部の言語は/をパターン区切り文字として使用するため、はい、どの言語/コンテキストに応じてエスケープする必要があります。その前にバックスラッシュを置くことでエスケープします:\/一部の言語(PHPなど)では、区切り文字として他の文字を使用できるため、エスケープする必要はありません。しかし、すべての言語で見た場合、/が持つ唯一の特別な重要性は、指定されたパターン区切り文字であることです。

79
Crayon Violent

以下にいくつかのオプションを示します。

  • Perlでは、代替の区切り文字を選択できます。 m//に限定されていません。 m{}など、別のものを選択できます。その後、エスケープする必要はありません。実際のところ、「Perl Best Practices」のDamian Conwayは、m{}が使用すべき唯一の代替区切り文字であると断言しており、これはPerl :: Critic(CPANで)によって強化されています。さまざまな代替区切り文字を使用しても問題ありませんが、//および{}は後で解読するのに最も明確なようです。ただし、これらの選択のいずれかでエスケープが多すぎる場合は、読みやすいものを選択してください。一般的な例は、m(...)m[...]、およびm!...!です。

  • 代替区切り文字を使用できない場合、または使用しない場合は、スラッシュをバックスラッシュでエスケープできます。たとえば、m/\/[^/]+$/m{/[^/]+$}になる可能性がある代替区切り文字を使用します。 )。バックスラッシュでスラッシュをエスケープすることは、名前とウィキペディアのページを獲得するのに十分な頻度です: Leaning Toothpick Syndrome 。インスタンスが1つしかない正規表現では、スラッシュをエスケープしても読みやすさの妨げになるレベルまで上昇することはありませんが、手に負えなくなった場合、および言語がPerlのように代替区切り文字を許可している場合は、推奨されるソリューションです。

35
DavidO

バックスラッシュ\を使用するか、別の区切り文字、つまりm#.\d#の代わりに/.\d/を選択します。「Perlでは、/文字m(一致); "

9
Corey

区切り文字が/の場合、エスケープする必要があります。

6
fvox