Игнорировать письма, которые соответствуют регулярному выражению в Postgres - PullRequest
0 голосов
/ 20 марта 2012

У меня есть SQL-запрос, который возвращает все записи компаний, игнорируя записи с электронной почтой, соответствующей заданному шаблону, используя Postgresql (info+random_name@example.com), а также знак плюс.

Обычный шаблон электронной почтыбыло бы 'Случайное_имя@example.com'

Мой SQL-запрос выглядит так:

SELECT * from companies where email !~ E'^(info)+[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+';

Синтаксис выглядит правильно?

Обновление:

Следующий запрос соответствует шаблону:

SELECT * from companies where email ~ E'^(info\+)+[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+';

Теперь, как изменить его, так как! ~, Похоже, не игнорирует соответствующий шаблон

update2:

Правильный синтаксис действительно следующий:

SELECT * from companies where email ~ E'^info\\+[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+';

Ответы [ 3 ]

1 голос
/ 20 марта 2012

Escape (двойной побег) знак плюс:

E'^(info)\\+[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+'
  here __^^

Более того, нет необходимости создавать группу с (info)

E'^info\\+[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+'
1 голос
/ 20 марта 2012

Чтобы быть более точным:

SELECT *
FROM   companies
WHERE  email ~ E'^info\\+[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}';

И это не предусматривает специальных символов, таких как äöü, которые также разрешены в доменных именах.

0 голосов
/ 20 марта 2012

Проверьте это и сообщите нам?

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

^info\+[A-Z...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...