WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Регулярные выражения (они же regular expression или regex) представляют
собой мощный путь для определения сложного поиска. MySQL использует реализацию Henry Spencer's, которая нацелена на
соответствие POSIX 1003.2. MySQL использует ее расширенную версию. Это упрощенное описание, которое опускает ряд деталей. За подробной
информацией отсылаю Вас к man-странице Henry Spencer's Регулярное выражение описывает набор строк. Самый простой regexp такой,
который не имеет никаких специальных символов. Например, regexp
Нетривиальные регулярные выражения используют некоторые специальные
конструкции так, чтобы они могли соответствовать больше, чем одной строке.
Например, regexp Как более сложный пример, regexp Регулярное выражение может использовать любой из следующих спецсимволов:
Регулярные выражения в MySQL
regex(7)
,
которая включена в дистрибутив исходного кода.hello
соответствует hello
и ничему другому.hello|word
соответствует строке
hello
или word
.B[an]*s
соответствует любой
из строк Bananas
, Baaaaas
, Bs
и любой
другой строке, начинающейся с B
, заканчивающейся на
s
и содержащей любое число символов в диапазоне от
a
до n
между ними.
^
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}
Чтобы быть более точным, атом, сопровождаемый одним целым числом
a*
a{0,}
.
a+
a{1,}
.
a?
a{0,1}
.i
без запятой соответствует последовательности точно
i
вхождений атома. Атом, сопровождаемый одним числом с запятой,
соответствует последовательности из одного или большего числа вхождений
i
. Атом, сопровождаемый двумя целыми числами i
и
j
соответствует последовательности, включающей от i
до j
копий атома (границы диапазона входят в число). Оба
аргумента должны быть в диапазоне от 0
до
RE_DUP_MAX
(по умолчанию 255), включая границы. Если заданы два
аргумента, второй должен быть больше или равен первому, но не меньше его.
[a-dX]
[^a-dX]
a
, b
, c
,
d
или X
. Чтобы включить литеральный символ
]
, он должен следовать сразу за открывающейся скобкой
[
. Чтобы включить символ -
, он должен быть написан
первым или последним. Так [0-9]
соответствует любой десятичной
цифре. Любой символ, который не имеет определенного значения внутри
[]
, не имеет никакого специального значения.
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
[[.characters.]]
ch
, то регулярное выражение [[.ch.]]*c
соответствует первым пяти символам chchcc
.
[=character_class=]
o
и (+)
члены класса
эквивалентности, то [[=o=]]
, [[=(+)=]]
и
[o(+)]
синонимы. Класс эквивалентности не может
быть краем диапазона.
[:character_class:]
[:
и :]
, представляет список всех символов,
принадлежащих к классу. Стандартные символьные имена:
Это указано для символьных классов, определенных на man-странице
alnum digit punct alpha graph space blank lower upper cntrl print xdigit ctype(3)
. Регион или язык может обеспечивать другие. Символьный
класс не может использоваться как край диапазона.
mysql> select "justalnums" REGEXP "[[:alnum:]]+"; -> 1
mysql> select "!!" REGEXP "[[:alnum:]]+"; -> 0
[[:<:]]
[[:>:]]
ctype(3)
) или символов подчеркивания
(_
).
mysql> select "a word a" REGEXP "[[:<:]]word[[:>:]]"; -> 1
mysql> select "a xword a" REGEXP "[[:<:]]word[[:>:]]"; -> 0
mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1
Найди своих коллег! |