Выход из прямой косой черты в регулярном выражении


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

4 79

4 ответа:

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

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

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

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

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

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