Избегая косой черты в регулярном выражении

67

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

  • 1
    Какую реализацию языка / регулярных выражений вы используете?
  • 4
    Я использую Perl для моего регулярного выражения
Показать ещё 1 комментарий
Теги:
escaping

4 ответа

55
Лучший ответ

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

26

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

  • 1
    +1 за лучшие практики Perl и Perl :: Критик
  • 1
    Можете привести пример? У меня есть это: perl -pi -e "s/chdir .*/chdir $ROBOT_PATH/g" startup_scripts/supervisord.conf И у меня perl -pi -e "s/chdir .*/chdir $ROBOT_PATH/g" startup_scripts/supervisord.conf конфликты с косой чертой.
Показать ещё 3 комментария
7

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

4

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню