В каких ситуациях регулярные выражения действительно являются лучшим способом решения проблемы? - PullRequest
3 голосов
/ 23 октября 2008

Я не уверен, что Джефф придумал это, но это шутка / высказывание, что люди, которые говорят: «О, я знаю, я буду использовать регулярные выражения!» теперь есть две проблемы . Я всегда считал, что люди используют регулярные выражения в очень неуместных контекстах .

Однако, при каких обстоятельствах регулярные выражения действительно лучший ответ? Какие проблемы они действительно лучше или, может быть, единственный способ решить ситуацию?

Ответы [ 6 ]

4 голосов
/ 23 октября 2008

Они могут использоваться для проверки чего-либо, имеющего шаблон, такой как:

  • Номер социального страхования
  • Номер телефона (555-555-5555)
  • Адрес электронной почты (что-то@example.com)
  • IP-адрес (но проверить его правильность сложнее)

Все они имеют шаблоны и легко проверяются RegEx.

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

Итак, лучшие способы?

  • Для санации ввода данных на клиенте сторона, прежде чем санировать их на сервер.
  • Чтобы сделать "Поиск и замена" некоторых строки, содержащие шаблон

Я уверен, что пропускаю много других дел.

4 голосов
/ 23 октября 2008

RexExprs хороши для:

  • Проверка формата текста (электронная почта, URL, номера)
  • Текстовый поиск / замена.
  • Отображения (например, шаблон URL для вызова функции)
  • Фильтрация некоторых текстов (связанных с заменой)
  • Лексический анализ при разборе.
0 голосов
/ 23 октября 2008

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

Вот пример. Учтите, что netstat в различных итерациях на разных ОС Linux и версиях netstat может возвращать разные результаты. Иногда есть дополнительный столбец, иногда есть сдвиг, если формат даты / времени. Регулярные выражения дают вам мощный способ справиться с этим с помощью одного выражения. Соедините это с именованными группами, и вы сможете получать данные без хаков, таких как:
1) разбить на пробелы
2) хорошо, версия netstat - X, так что добавьте, мне нужно добавить 1 ко всем ссылкам массива после столбца 5.
3) хорошо, версия netstat - Y, поэтому мне нужно убедиться, что я использую несколько ссылок на массивы для информации о дате.

YUCK. Легко исправить в регулярном выражении: -)

0 голосов
/ 23 октября 2008

Они хороши для сопоставления или поиска текста, который принимает очень специфический и простой формат. Под «простым» я подразумеваю не вложенный и меньший, чем вся спецификация html, например.

0 голосов
/ 23 октября 2008

они действительно хороши, когда вы хотите быть более конкретными, чем "*" или "?" например, «3 буквы, затем 2 цифры, затем знак $, затем точка»

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

Но то же самое чувство все еще применяется. Если вы не знаете, как использовать регулярные выражения, лучше не пытаться делать что-то действительно необычное, иначе вы тоже получите один из этих тегов (см. Бронзовый список); o)

https://stackoverflow.com/users/730/keng

0 голосов
/ 23 октября 2008

Регулярные выражения - отличный способ для анализа текста, у которого еще нет синтаксического анализатора (например, XML). Я использовал его для создания синтаксического анализатора синтаксиса mod_rewrite в файле .htaccess или в моем проекте перезаписи URL http://www.codeplex.com/urlrewriter например

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...