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

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

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

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

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

[b]Примеры 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
Добавлено: 23 Февраля 2015 17:37:51 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...