Выход из прямой косой черты в регулярном выражении
мой вопрос простой, и речь идет о регулярном выражении экранирования. Вы должны избежать прямой косой черты / в регулярном выражении? И как бы вы это сделали?
4 ответа:
какой контекст / язык? Некоторые языки используют
/как разделитель шаблона, так что да, вам нужно избежать его, в зависимости от того, какой язык/контекст. Вы избегаете его, поставив перед ним обратную косую черту:\/для некоторых языков (например, PHP) вы можете использовать другие символы в качестве разделителя, и поэтому вам не нужно его избегать. Но АФАИК во всех языках, единственное особое значение то/Это может быть Туль разделитель.
вот несколько вариантов:
в Perl можно выбрать альтернативные разделители. Вы не ограничены
m//. Вы можете выбрать другой, например,m{}. Тогда побег не нужен. На самом деле, Дэмиан Конвей в "Perl Best Practices" утверждает, чтоm{}является единственным альтернативным разделителем, который должен использоваться, и это усиливается Perl::Critic (на CPAN). В то время как вы можете уйти с помощью различных альтернативных символов-разделителей,//и{}кажется, самый ясный, чтобы расшифровать позже. Однако, если любой из этих вариантов приводит к слишком большому побегу, выберите тот, который лучше всего подходит для разборчивости. Распространенными примерами являютсяm(...),m[...]иm!...!.
в тех случаях, когда вы либо не можете, либо предпочитаете не использовать альтернативные разделители, вы можете избежать прямых косых черт с обратной косой чертой:
m/\/[^/]+$/например (используя альтернативный разделитель, который может статьm{/[^/]+$}, которые могут читайте подробнее). Выход из косой черты с обратной косой чертой достаточно распространен, чтобы заработать имя и страницу Википедии:Синдром Наклонной Зубочистки. В регулярных выражениях, где есть только один экземпляр, экранирование косой черты может не подняться до уровня, который считается препятствием для разборчивости, но если он начинает выходить из-под контроля, и если ваш язык разрешает альтернативные разделители, как это делает Perl, это было бы предпочтительным решением.