Как я могу построить регулярное выражение для проверки кодов ошибок SMTP - PullRequest
0 голосов
/ 16 апреля 2020

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

Ответ тела из отклоненного сообщения электронной почты выглядит так (релевантна только диагностика c строка кода):

- 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)

Regex101.com

1 Ответ

1 голос
/ 16 апреля 2020

Исходя из ваших примеров данных, это регулярное выражение должно делать то, что вы хотите:

(?<=smtp;) ?(\d{3})[ -]((?:\d+\.){2}\d+)

Он ищет строку smtp;, за которой следует дополнительный пробел, затем 3 цифры (захвачены в группе 1), пробел или дефис, а затем строка цифр, ., цифры, ., цифры (захвачены в группе 2).

Демонстрация по регулярному выражению regex101

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