Шаблон RegEx для поиска символов перед «@» в электронном письме - PullRequest
2 голосов
/ 30 марта 2020

Я хочу иметь возможность запрашивать в базе данных адреса электронной почты, соответствующие регулярному выражению. Пример того, чего я пытаюсь избежать, это:
В моей базе данных у меня есть пользователь с адресом электронной почты amy.user@gmail.com
У меня также есть 700 пользователей с доменным именем @amyconsulting.com

Мой текущий поиск вернет 701 результатов вместо 1, когда я попытаюсь найти Эми следующим образом: ^.*amy.*$
Как можно выполнить поиск только символов до символа @ в адресе электронной почты? Заранее спасибо ...

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Другим вариантом является использование отрицательного класса символов [^@]*, совпадающего с 0+ вхождениями любого символа, кроме @

Если вы также не хотите сопоставлять символ новой строки, вы можете использовать [^@\r\n]* или [^\s\@], чтобы также не совпадать с пробелами.

^[^@]*amy[^@]*@[^@]+$

Пояснение

  • ^ Начало строки
  • [^@]* Совпадение 0+ вхождений любого символа, кроме @
  • amy
  • [^@]* Совпадение 0+ вхождений любого символа, кроме @
  • @ Соответствует @
  • [^@]+ Соответствует 1+ вхождениям любого символа, кроме @
  • $ Конец строки

Regex demo

1 голос
/ 30 марта 2020

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

.*(amy).*@[\w]+(\.)[\w]+

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

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

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