Я пытаюсь создать регулярное выражение для чтения и определения кодов ошибок smtp в возвращенных письмах, поэтому позже я смогу сопоставить эти коды с базами данных кодов ошибок smtp и перевести с помощью других дружественных сообщений.
Основной ответ на возвращенное письмо выглядит следующим образом (актуальна только строка диагностического кода):
- Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does...
- Diagnostic-Code: smtp; 553 5.1.2 Unknown mail server. Could not find a mail server...
- Diagnostic-Code: smtp; 550 5.5.0 Requested action not taken: mailbox unavailable...
- Diagnostic-Code: smtp;550 5.5.0 Requested action not taken: mailbox unavailable...
- Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist...
Это может быть два случая:
1. 550 5.5.0 --> 3 digit number + space + 3 digit number only if followed by a dot.
2. 550-5.1.1 --> 3 digit number + hyphen + 3 digit number only if followed by a dot.
Я пробовал с этим регулярным выражением, но не захватывает первые 3 цифры, а вторые 3 цифры, за которыми следует точка
(?<!\d)(\d+\.){2}(?>\d)
1 ответ
Основываясь на ваших данных образца, это регулярное выражение должно делать то, что вы хотите:
(?<=smtp;) ?(\d{3})[ -]((?:\d+\.){2}\d+)
Он ищет строку smtp;
, за которой следует необязательный пробел, затем 3 цифры (захваченные в группе 1), пробел или дефис, а затем строку цифр, .
, цифры, {{X2} }, цифры (захвачены в группе 2).
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки, синтаксического анализа и преобразования строк. Поскольку регулярные выражения не полностью стандартизированы, все вопросы с этим тегом должны также включать тег, определяющий применимый язык программирования или инструмент.