Подтвердить что ты не робот

Когда следует предпочесть регулярное выражение над встроенными строковыми функциями?

Некоторые говорят, что я должен использовать регулярное выражение, когда это возможно, другие говорят, что я должен использовать его по крайней мере, насколько это возможно. Есть ли что-то вроде "Perl Etiquette" в этом отношении или только TIMTOWTDI?

4b9b3361

Ответ 1

Я думаю, что многие ответы, которые у вас уже есть, хороши. Я хочу обратиться к части этикета, потому что я думаю, что есть некоторые.

Подсчитано: если имеется надежный парсер, используйте его вместо регулярных выражений; 100% времени. Никогда не рекомендуйте ничего начинающему. Так и Ndash;

Этикет

Dos

  • Используйте substr, index и rindex, если это необходимо, но признайте, что они могут "отменить", поэтому их лучше использовать, когда бенчмаркинг показывает их выше регулярных выражений; регулярные выражения могут быть неожиданно быстрыми во многих случаях.
  • Использовать регулярные выражения, когда нет хорошего парсера, и писать грамматику Parse:: RecDescent - слишком много работы, слишком много работы или будет слишком медленным.
  • Использовать регулярные выражения для кода выброса, как однострочные, для хорошо известных/прогнозируемых данных, включая HTML/CSV, ранее запрещенные для использования регулярных выражений.
  • Помните об альтернативах для более крупных проблем, таких как P:: RecD, Parse:: Yapp и Marpa.
  • Соблюдайте свой собственный совет. Предполагается, что Perl будет забавным. Делайте все, что захотите; просто будьте готовы получить удар, если вы жалуетесь, когда не следуете советам, и он идет боком.: P

Ответ 2

Уровень сложности обычно определяет, использую ли я регулярное выражение или нет. Некоторые вопросы, которые я задаю при принятии решения о том, следует ли использовать регулярное выражение, следующие:

  • Нет ли встроенной строковой функции, которая обрабатывает это относительно легко?
  • Нужно ли собирать группы подстрок?
  • Нужны ли мне сложные функции, такие как внешний вид или отрицательные наборы?
  • Я собираюсь использовать наборы символов?
  • Будет ли использование регулярного выражения сделать мой код более удобочитаемым?

Если я отвечу да на любой из них, я обычно использую регулярное выражение.

Ответ 3

Я не знаю ни одного "этикета" об этом.

Perl regex сильно оптимизирован (что одна из вещей, язык которых известен, хотя есть двигатели, которые быстрее), и, в конце концов, если ваше регулярное выражение настолько просто, что его можно заменить строковой функцией, Я не верю, что регулярное выражение будет менее значительным. Если проблема, которую вы пытаетесь решить, настолько чувствительна к времени, что вы можете изучить другие возможности оптимизации.

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

Только мои два цента.

Ответ 4

Хотя я бы классифицировал это как упрямый для SO, я дам свою точку зрения.

Используйте regex, когда строка:

  • "Too Dynamic" (строка может иметь много вариаций, что использование строковой библиотеки (ов) было бы громоздким.
  • "Содержит шаблоны", если есть подлинный шаблон для строки (и может быть такой же простой, как 1 символ или группа символов), это где (я чувствую), что выражение regex превосходит.
  • "Слишком сложный" Если вы обнаруживаете, что объявляете целый функциональный блок только для того, чтобы сделать то, что может сделать один шаблон, я вижу, что стоит просто использовать регулярное выражение. (Однако см. Также "Слишком сложный" ).

Использовать регулярное выражение не:

  • "Быстрая". Рассмотрите накладные расходы, связанные с разворачиванием библиотеки регулярных выражений за захват информации непосредственно из строки.
  • "Слишком сложный" Хороший код не всегда короткий. Если вы начнете создавать огромный шаблон, чтобы обойти несколько строк кода, это прекрасно, но имейте в виду, что он рискует удобочитаемости. Возвращаясь к этой части и пытаясь обернуть вокруг нее снова, возможно, не стоит просто использовать метод простой-jane.

Ответ 5

Я бы сказал, если вам нужно более одного или двух вызовов строковых функций для этого, используйте регулярное выражение.;)

Ответ 6

Perl - отличный язык для регулярного выражения. У него, честно говоря, один из величайших парсеров любого языка, поэтому вы видите так много ответов "использовать регулярное выражение". Однако я не уверен, что отвращение к регулярному выражению.

Моим ответом было бы: можете ли вы суммировать работу в одном шаблоне проще, чем использовать строковую функцию, или вам нужно использовать несколько строковых функций по сравнению с одним регулярным выражением? В любом случае я бы нацелился на регулярное выражение. В противном случае сделайте то, что вам удобно.

Ответ 7

Для вещей, которые не слишком сложны, когда регулярное выражение становится раздутым, влияет на читаемость кода и вызывает проблемы с производительностью. Вы можете сделать это с помощью серьезных шагов, используя встроенные функции и другие средства. У вас может не быть классного однорежимного регулярного выражения, но ваш код будет доступен для чтения и maintanable.

А также не слишком простые проблемы, потому что, опять же, регулярные выражения имеют большой вес, и обычно есть встроенные функции, которые обрабатывают простые сценарии.

Это будет зависеть от того, что вы собираетесь делать. Конечно, не используйте регулярное выражение для синтаксического анализа (особенно HTML и т.д.).