Проблема с библиотеками регулярных выражений, даже с хорошо протестированными, состоит в том, что они не были проверены на ваших данных или ваших целях . Регулярные выражения, которые отлично работали с чужими данными в своих целях, могут вообще не работать для вас.
На снимке экрана http://www.regexbuddy.com/library.html действительно показано регулярное выражение, соответствующее недопустимым датам, таким как 30 февраля. Комментарий с регулярным выражением объясняет это. Комментарий не полностью виден на снимке экрана.
Это прекрасный пример того, почему вы должны быть осторожны с библиотеками регулярных выражений и программированием копирования и вставки в целом. Регулярное выражение \d\d/\d\d/\d\d\d\d
может быть вполне приемлемым для извлечения дат из файла, если вы знаете, что файл никогда не содержит что-то вроде 99/99/9999
. Если файл содержит только действительные даты и другие данные, которые вообще не похожи на даты, тогда простого регулярного выражения вполне достаточно для извлечения дат. И даже если данные могут содержать недопустимые даты, вы можете разрешить регулярное выражение сопоставлять их и отфильтровать недопустимые даты в процедурном коде, который обрабатывает совпадения регулярного выражения.
Что касается адресов электронной почты, единственный способ определить, является ли он действительным, состоит в том, чтобы отправить ему электронное письмо и получить ответ. Даже отсутствие рикошета не означает, что письмо было сохранено в чьем-либо почтовом ящике или что оно будет прочитано кем-либо. Регулярное выражение может быть полезно для фильтрации вещей, которые, очевидно, не являются адресами электронной почты, поэтому вы можете пропустить гораздо более дорогой этап отправки подтверждающего электронного письма. Регулярное выражение также может быть полезно для извлечения адресов электронной почты из документов или архивов. Но это действительно не может сказать, является ли invalid@regexbuddy.com действительным адресом электронной почты или нет. Похоже, что это так, но это не так. Письмо, отправленное на этот адрес, сохраняется на /dev/null
.