Исключая совпадение в матче Regex RE2 - PullRequest
0 голосов
/ 03 июля 2019

Наше устройство защиты электронной почты позволяет использовать Regex RE2, что позволяет нам выполнять дополнительную фильтрацию контента.С недавним притоком спуфинга отображаемых имен я использую это, чтобы блокировать электронные письма с именами и фамилиями некоторых наших сотрудников.Проблема в том, что я пытаюсь разрешить доставку писем с их личного адреса электронной почты, которые в настоящее время помещены в карантин из-за этого изменения.

То, что у меня есть:

Это работает в PCRE Regex с использованием негативного взгляда (PCRE не работает в устройстве электронной почты):

(\nfrom:.*john.*doe.*<)(?!jdoe@gmail\.com>)

Однако RE2 не работаетподдержать негативную перспективу.Самое близкое, на что я могу прийти, это:

(\nfrom:.*john.*doe.*<)([^jdoe@gmail\.com>])

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

И последнее: это должен быть однострочный текст, ничто не требует его запуска из программы.Этот код должен быть вставлен в HTML-форму, где он анализируется.


Хорошо, после дополнительных исследований я нашел это в другом посте: https://stackoverflow.com/a/1240293/11731342

^(?:[^b]+|b(?:$|[^a]|a(?:$|[^r])))*$

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

(\nfrom:.*john.*james.*<)((?:[^j]+|j(?:$|[^j]|j(?:$|[^a]|a(?:$|[^m]|m(?:$|[^e]|e(?:$|[^s]|s(?:$|[^@]|@(?:$|[^e]|e(?:$|[^m]|m(?:$|[^a]|a(?:$|[^i]|i(?:$|[^l]|l(?:$|[^.]|.(?:$|[^c]|c(?:$|[^o]|o(?:$|[^m]|m(?:$|[^>])))))))))))))))))*$)
...