использование регулярных выражений в sqlite или mysql - PullRequest
0 голосов
/ 11 апреля 2011

Я использую sqlite3, чтобы попытаться найти пользователей, у которых есть адрес электронной почты Gmail, Yahoo или Hotmail.Это нужно сделать только на основе первой части домена, поэтому я хочу, чтобы любой адрес, на котором был @yahoo, был принят.

Из документации видно, что невозможно использовать обычныйвыражение при запросе базы данных sqlite.Есть ли какой-нибудь элегантный способ сделать что-то подобное?Кажется, что невозможно использовать «like / in» с несколькими вариантами (например: LIKE (% @ yahoo%,% @ gmail%,% @ hotmail%)?

В противном случае яможет переключиться на MySQL для reg exp, так как я хочу, чтобы решение было простым и элегантным, а DB не является важным фактором. Как бы этот запрос регулярного выражения был написан в MySQL?

Ответы [ 3 ]

2 голосов
/ 11 апреля 2011

Вы не можете использовать несколько «LIKE» таким образом, но вы можете использовать:

(email LIKE "%@yahoo%" OR email LIKE "%@gmail%" OR ....)
0 голосов
/ 11 апреля 2011

вы можете использовать то, что использует Немоден или что-то вроде этого (не проверено)использует индексы tho).

0 голосов
/ 11 апреля 2011

Я думаю, что вам может понадобиться что-то вроде этого (функция RLIKE):

WHERE email RLIKE '^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.([A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum|travel)$'

Если вы используете what_cs (с учетом регистра), используйте a-zA-Z вместо AZ.

Вы также можете избавиться от ^ и $ в регулярном выражении.^ означает «начинается с», а $ означает «заканчивается»

ОБНОВЛЕНИЕ:

'.*@(gmail|hotmail|yahoo)\.[A-Z]{2,4}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...