Свободно доступные, хорошо отлаженные регулярные выражения - PullRequest
3 голосов
/ 21 апреля 2010

Я читал документацию ICU и наткнулся на этот прекрасный совет:

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

На какие библиотеки хорошо отлаженных регулярных выражений вы обычно ссылаетесь?

Я не особо увлечен http://regexlib.com, где выражения не кажутся отлаженными. Похоже, что нет никакого процесса обеспечения качества, кроме комментариев и оценок пользователей.

Ответы [ 5 ]

6 голосов
/ 22 апреля 2010

Проблема с библиотеками регулярных выражений, даже с хорошо протестированными, состоит в том, что они не были проверены на ваших данных или ваших целях . Регулярные выражения, которые отлично работали с чужими данными в своих целях, могут вообще не работать для вас.

На снимке экрана http://www.regexbuddy.com/library.html действительно показано регулярное выражение, соответствующее недопустимым датам, таким как 30 февраля. Комментарий с регулярным выражением объясняет это. Комментарий не полностью виден на снимке экрана.

Это прекрасный пример того, почему вы должны быть осторожны с библиотеками регулярных выражений и программированием копирования и вставки в целом. Регулярное выражение \d\d/\d\d/\d\d\d\d может быть вполне приемлемым для извлечения дат из файла, если вы знаете, что файл никогда не содержит что-то вроде 99/99/9999. Если файл содержит только действительные даты и другие данные, которые вообще не похожи на даты, тогда простого регулярного выражения вполне достаточно для извлечения дат. И даже если данные могут содержать недопустимые даты, вы можете разрешить регулярное выражение сопоставлять их и отфильтровать недопустимые даты в процедурном коде, который обрабатывает совпадения регулярного выражения.

Что касается адресов электронной почты, единственный способ определить, является ли он действительным, состоит в том, чтобы отправить ему электронное письмо и получить ответ. Даже отсутствие рикошета не означает, что письмо было сохранено в чьем-либо почтовом ящике или что оно будет прочитано кем-либо. Регулярное выражение может быть полезно для фильтрации вещей, которые, очевидно, не являются адресами электронной почты, поэтому вы можете пропустить гораздо более дорогой этап отправки подтверждающего электронного письма. Регулярное выражение также может быть полезно для извлечения адресов электронной почты из документов или архивов. Но это действительно не может сказать, является ли invalid@regexbuddy.com действительным адресом электронной почты или нет. Похоже, что это так, но это не так. Письмо, отправленное на этот адрес, сохраняется на /dev/null.

4 голосов
/ 21 апреля 2010

Я не могу сказать достаточно хороших слов о RegexBuddy . Он поставляется с большой библиотекой внутри. http://www.regexbuddy.com/library.html

Это не бесплатно, но если вы используете Windows, это стоит вложений.

Интерактивный режим позволяет вам отлаживать ваши собственные выражения в режиме реального времени - и у него много механизмов (.NET, Perl и т. Д.). Итак, - он позволит вам быстро найти конкретную ошибку високосного года:).

2 голосов
/ 22 апреля 2010

Я не согласен с Марком.

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

Не позволяйте "достаточно хорошему" решению быть убитым, потому что вы пытаетесь достичь совершенства.

1 голос
/ 22 апреля 2010

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

Регулярные выражения не сложны.Это просто маленький мини-язык программирования.Если вы можете написать код, вы можете выучить регулярные выражения.Один полный учебный день должен быть достаточным временем для любого, кто обладает навыками программирования.

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

1 голос
/ 21 апреля 2010

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

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

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