- → Программирование
- → MySQL
- → Статьи
MySQL regexp: регулярные выражения в mysql
Поговорим о регулярных выражениях в 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 запросы






Development — Taras Moroz