Избегая косой черты в регулярном выражении - PullRequest
91 голосов
/ 20 мая 2011

Мой вопрос прост и касается экранирования регулярных выражений.Вам нужно экранировать косую черту / в регулярном выражении?И как бы ты это сделал?

Ответы [ 4 ]

78 голосов
/ 20 мая 2011

Какой контекст / язык?Некоторые языки используют / в качестве разделителя шаблонов, поэтому да, вам нужно его избегать, в зависимости от того, какой язык / контекст.Вы избежите его, поставив перед ним обратную косую черту: \/ Для некоторых языков (например, PHP) вы можете использовать другие символы в качестве разделителя, и поэтому вам не нужно избегать его.Но AFAIK на всех языках, единственное особое значение, которое имеет /, это то, что он может быть назначенным разделителем шаблонов.

35 голосов
/ 20 мая 2011

Вот несколько вариантов:

  • В Perl вы можете выбрать альтернативные разделители.Вы не ограничены m//.Вы можете выбрать другой, например m{}.Тогда бежать не нужно.На самом деле Дамиан Конуэй в «Perl Best Practices» утверждает, что m{} - единственный альтернативный разделитель, который следует использовать, и это усиливается Perl :: Critic (на CPAN).В то время как вы можете обойтись без использования различных альтернативных символов-разделителей, // и {} кажутся наиболее ясными для расшифровки позже.Однако, если какой-либо из этих вариантов приведет к слишком большому спасению, выберите тот, который лучше всего подходит для разборчивости.Типичными примерами являются m(...), m[...] и m!...!.

  • В тех случаях, когда вы не можете или предпочитаете не использовать альтернативные разделители, вы можете избежать косой черты с помощьюобратная косая черта: например, m/\/[^/]+$/ (с использованием альтернативного разделителя, который может стать m{/[^/]+$}, который может читаться более четко).Избежать косой черты с помощью обратной косой черты достаточно часто, чтобы заработать имя и страницу википедии: Синдром наклоняющейся зубочистки .В регулярных выражениях, где есть только один экземпляр, экранирование косой черты может не подняться до уровня, который считается помехой для разборчивости, но если он начинает выходить из-под контроля и если ваш язык разрешает использование альтернативных разделителей, как это делает Perl, это будетбыть предпочтительным решением.

9 голосов
/ 20 мая 2011

Используйте обратную косую черту \ или выберите другой разделитель, например m#.\d# вместо /.\d/ "В Perl вы можете изменить разделитель / регулярное выражение почти на любой другой специальный символ, если перед ним стоит буква m(для матча); "

6 голосов
/ 20 мая 2011

Если разделитель равен /, вам нужно будет убежать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...