MySQL regexp: регулярные выражения в mysql

mysql regexp

Поговорим о регулярных выражениях в mysql. Или как сейчас принято называть mysqlregexp. БД MySQL имеет множество инструментов для реализации поиска информации. Это можно сделать с помощью оператора like или =, или regexp, о чем мы и поговорим.

Регулярное выражение это набор символов, определяющий шаблон строки. По этому шаблону и происходит поиск нужных данных в БД MySQL. Например, если регулярное выражение соответствует sitear, то результатом будут совпадения с sitear и ничего больше. Более сложное это sitear|sitearchitector, будет находить совпадения как по sitear, так и по sitearchitector.

Можно привести пример посложнее, s[ite]*ar, совпадениями будут: sitear, siar, sitar, siiiitttettear, sar. То есть символы ite в шаблоне, могут встречаться сколько хочешь и в любом количестве, а могут и вообще не встречаться.

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

Примеры MySQL REGEXP

Символ

Назначение

Пример (1 – true, 0 – false)

^

Соответствие началу строки.

mysql> SELECT "fo\nfo" REGEXP "^fo$";  -> 0

mysql> SELECT "fofo" REGEXP "^fo";  -> 1

$

Соответствие концу строки.

mysql> SELECT "fo\no" REGEXP "^fo\no$"; -> 1

mysql> SELECT "fo\no" REGEXP "^fo$";               -> 0

.

Соответствие любому символу (включая перевод строки).

mysql> SELECT "fofo" REGEXP "^f.*";   -> 1

mysql> SELECT "fo\nfo" REGEXP "^f.*";              -> 1

a*

Соответствие любой последовательности из нуля или более символов "a".

mysql> SELECT "Ban" REGEXP "^Ba*n";               -> 1

mysql> SELECT "Baaan" REGEXP "^Ba*n";  -> 1

mysql> SELECT "Bn" REGEXP "^Ba*n"; -> 1

a+

Соответствие любой последовательности из одного или более символов "a ".

mysql> SELECT "Ban" REGEXP "^Ba+n";               -> 1

mysql> SELECT "Bn" REGEXP "^Ba+n"; -> 0

a?

Соответствие как нулю, так и одному символу "a".

mysql> SELECT "Bn" REGEXP "^Ba?n"; -> 1

mysql> SELECT "Ban" REGEXP "^Ba?n";                -> 1

mysql> SELECT "Baan" REGEXP "^Ba?n"; -> 0

de|abc

Соответствие как последовательности de, так и последовательности abc.

mysql> SELECT "pi" REGEXP "pi|apa";                   -> 1

mysql> SELECT "axe" REGEXP "pi|apa";                               -> 0

mysql> SELECT "apa" REGEXP "pi|apa";               -> 1

mysql> SELECT "apa" REGEXP "^(pi|apa)$";       -> 1

mysql> SELECT "pi" REGEXP "^(pi|apa)$";           -> 1

mysql> SELECT "pix" REGEXP "^(pi|apa)$";        -> 0

(abc)*

Соответствие нулю или более вхождениям последовательности abc.

mysql> SELECT "pi" REGEXP "^(pi)*$"; -> 1

mysql> SELECT "pip" REGEXP "^(pi)*$";               -> 0

mysql> SELECT "pipi" REGEXP "^(pi)*$";              -> 1

{1}

{2,3}

Устанавливает количество вхождений предшествующего элемента.

mysql> SELECT "a" REGEXP "(a){0,}";     -> 1

mysql> SELECT "b" REGEXP "(a){0,}";     -> 1

mysql> SELECT "aaa" REGEXP "(a){2,3}"; -> 1

mysql> SELECT "a" REGEXP "(a){2,3}"; -> 0

mysql> SELECT "aaaa" REGEXP "(a){2,3}"; -> 0

[a-dX]

[^a-dX]

Соответствие символа, являющегося (или не являющегося, если используется ^) символом a, b, c, d или X.

mysql> SELECT "aXbc" REGEXP "[a-dXYZ]";         -> 1

mysql> SELECT "aXbc" REGEXP "^[a-dXYZ]$";    -> 0

mysql> SELECT "aXbc" REGEXP "^[a-dXYZ]+$";                 -> 1

mysql> SELECT "aXbc" REGEXP "^[^a-dXYZ]+$";                 -> 0

mysql> SELECT "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1

mysql> SELECT "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0

[:char_class:]

Имя класса символов в [: :] обозначает список символов принадлежащих к классу.

Классы символов:

alnum    digit       punct

alpha      graph    space

blank      lower    upper

cntrl        print      xdigit

mysql> SELECT "justalnums" REGEXP "[[:alnum:]]+"; -> 1

mysql> SELECT "!!" REGEXP "[[:alnum:]]+";        -> 0

[[:<:]]

[[:>:]]

Соответствие началу и концу слова.

mysql> SELECT "a word a" REGEXP "[[:<:]]word[[:>:]]";                                  -> 1

mysql> SELECT "a xword a" REGEXP "[[:<:]]word[[:>:]]";                         -> 0

 

Вот пример полноценного сложного регулярного выражения в mysql:

mysql> SELECT "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1

Это все что касается mysql regexp, если у вас остались вопросы по поводу регулярных выражений в mysql, задайте их в комментариях к данной статье.



Дальше: MySQL запросы: простые и сложные mysql запросы


Дискуссия по теме     6 Комментариев
Добавить комментарий
Родион Николаевич Юрьев 07.09.2013 в 13:06
Учтите, что REGEXP в MySQL непредсказуемо работают с UTF-8. Это может вызвать проблемы, об этом есть предупреждение в документации: http://dev.mysql.com/doc/refman/5.7/en/regexp.html См. там в середине - Warning про мультибайт. http://juryev.ru
Tou 06.06.2013 в 19:08
допустим есть таблица строки из которой выбираются с помощью REGEXP. Как средствами SQL добавить в результат колонку, содержащую число - позицию в строке, где именно найдено вхождение подстроки, заданной регулярным выражением в скобках? например, есть таблица 1 --- ABCDE, 2 --- BCDXYZ, 3 --- XYZ. нужен SELECT ... REGEXP .*(BCD).* который вернет: 1 --- ABCDE --- 1, 2 --- BCDXYZ --- 0.
Дмитрий 10.12.2012 в 19:09
Тарас, вы ошибаетесь. "..d tag not regexp.." - not означает, что наоборот значение поля tag не должно начинаться на эти символы
Тарас 11.12.2012 в 00:41
Ну да... совершенно верно. Вы правы.
Тарас 28.09.2011 в 18:31
Это означает, что значение поля tag должно начинатся с перечисленных в [...] символов, при этом a-z и A-Z это диапазоны, которые включают в себя весь латинский алфавит прописных и заглавных букв.
Алексей 28.09.2011 в 18:16
Добрый день! Подскажите, а что означает данное выражение: $query_ltr = "and tag not regexp('^[a-zA-ZаимтщАИМТЩбйнуъэБЙНУЪЭ вкофыВКОФЫгсхГСХДЛПЬЦџдпьлцяеЕжЖњЊзЗрРрРшШ]')";
Добавить комментарий
Просмотров: 37728
Страхование КАСКО
карта банка
ндфл
усн
Оформление доверенности
страхование ипотеки
esim
осаго
ВЗР страхование
кредитная карта
Cialis barato Viagra Contrareembolso Cialis 5 mg precio mejores farmacias para comprar Viagra reacciones adversas de Cialis Reduslim cómo tomar soluciones para la impotencia Sildenafil Comprare Cialis 5 mg Giornaliero online in Italia Effetti indesiderati del Cialis 5 mg Acquista Cialis 20mg Cialis originale in vendita In Svizzera si compra il Viagra senza ricetta Cialis 10mg online Acquista Viagra in farmacia Offerta Cialis 5mg Spedra Avanafil in vendita online Acquista Viagra in Svizzera senza prescrizione авиатор спрайб Consegna a domicilio di Cialis 5 mg Effetti collaterali di Cialis 5 mg Consegna a domicilio di Cialis 20mg Acquista Cialis originale generico in Svizzera Consegna a domicilio di Viagra senza ricetta in Svizzera Compra Cialis 10mg Consegna a domicilio di Viagra in farmacia online Sconto Cialis 5mg Comprar Reduslim por internet Comprare Spedra Avanafil senza ricetta online Dove comprare il Viagra in Svizzera Compra Cialis Comprar online Viagra Contrareembolso Dónde encontrar Cialis 5 mg al mejor precio Viagra sin receta Cialis 5 mg efectos secundarios graves Reduslim comprar en línea Disfuncion Erectil tadalafilo avanafil prezzo cialis 20 mg prezzo cialis effetti benefici cialis 10 mg Reduslim Kaufen pulse x coin price