Поговорим о регулярных выражениях в 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