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