Spec-Zone .ru
спецификации, руководства, описания, API
|
Таблица 12.9. Представьте Операторы Регулярного выражения в виде строки
Имя | Описание |
---|---|
NOT
REGEXP |
Отрицание REGEXP |
REGEXP |
Сопоставление с образцом используя регулярные выражения |
RLIKE |
Синоним для REGEXP |
Регулярное выражение является мощным способом определить образец для сложного поиска.
MySQL использует реализацию Генри Спенсером регулярных выражений, которая нацеливается на соответствие с POSIX
1003.2. MySQL использует расширенную версию, чтобы поддерживать операции сопоставления с образцом, выполняемые с
REGEXP
оператор в
SQL-операторах.
Этот раздел подводит итог, с примерами, специальными символами и конструкциями, которые могут использоваться в
MySQL для REGEXP
операции. Это не содержит все детали, которые могут быть найдены в Генри Спенсере regex(7)
страница руководства. Та страница руководства включается в исходные
дистрибутивы MySQL, в regex.7
файл под regex
каталог. См. также Раздел
3.3.4.7, "Сопоставление с образцом".
,
expr
NOT REGEXP pat
expr
NOT RLIKE pat
Это - то же самое как NOT (
. expr
REGEXP pat
)
,
expr
REGEXP pat
expr
RLIKE pat
Выполняет соответствие образца строкового выражения expr
против образца pat
. Образец может быть расширенным
регулярным выражением. Синтаксис для регулярных выражений обсуждается в Разделе
12.5.2, "Регулярных выражениях". Возвраты 1
если expr
соответствия pat
; иначе это возвращается 0
. Если также expr
или pat
NULL
, результат NULL
. RLIKE
синоним для REGEXP
, предусмотренный mSQL
совместимость.
Образец не должен быть литеральной строкой. Например, это может быть определено как строковое выражение или столбец таблицы.
Поскольку MySQL использует синтаксис escape C в строках (например,"\n
"чтобы представить символ
новой строки), следует удвоить любого"\
"то, что Вы используете в Вашем REGEXP
строки.
REGEXP
не
является чувствительным к регистру, кроме тех случаев, когда используемый с двоичными строками.
mysql>SELECT 'Monty!' REGEXP '.*';
-> 1mysql>SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
-> 1mysql>SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
-> 1 0mysql>SELECT 'a' REGEXP '^[a-d]';
-> 1
REGEXP
и RLIKE
используйте набор символов и сопоставления параметров, решая тип символа и выполняя сравнение. Если
у параметров есть различные наборы символов, или сопоставления, coercibility правила применяются как
описано в Разделе 10.1.7.5, "Сопоставление
Выражений".
REGEXP
и RLIKE
операторы работают мудрым байтом способом, таким образом,
они не многобайтовый сейф и могут привести к неожиданным результатам с многобайтовыми наборами
символов. Кроме того, эти операторы сравнивают символы своими значениями байта, и акцентируемые
символы, возможно, не сравниваются столь же равный, даже если данное сопоставление обрабатывает
их как равных.
Регулярное выражение описывает ряд строк. Самое простое регулярное выражение является тем, у которого нет
никаких специальных символов в нем. Например, регулярное выражение hello
соответствия hello
и ничто иное.
Нетривиальные регулярные выражения используют определенные специальные конструкции так, чтобы они могли
соответствовать больше чем одну строку. Например, регулярное выражение hello|word
соответствия любой строка hello
или строка word
.
Как более сложный пример, регулярное выражение B[an]*s
соответствия любая из строк
Bananas
, Baaaaas
, Bs
, и
любая другая строка, запускающаяся с a B
, окончание s
,
и содержание любого числа a
или n
символы
промежуточный.
Регулярное выражение для REGEXP
оператор может использовать любой из следующих специальных символов и
конструкций:
^
Соответствуйте начало строки.
mysql>SELECT 'fo\nfo' REGEXP '^fo$';
-> 0mysql>SELECT 'fofo' REGEXP '^fo';
-> 1
$
Соответствуйте конец строки.
mysql>SELECT 'fo\no' REGEXP '^fo\no$';
-> 1mysql>SELECT 'fo\no' REGEXP '^fo$';
-> 0
.
Соответствуйте любой символ (включая возврат каретки и новую строку).
mysql>SELECT 'fofo' REGEXP '^f.*$';
-> 1mysql>SELECT 'fo\r\nfo' REGEXP '^f.*$';
-> 1
a*
Соответствуйте любую последовательность нуля или больше a
символы.
mysql>SELECT 'Ban' REGEXP '^Ba*n';
-> 1mysql>SELECT 'Baaan' REGEXP '^Ba*n';
-> 1mysql>SELECT 'Bn' REGEXP '^Ba*n';
-> 1
a+
Соответствуйте любую последовательность один или больше a
символы.
mysql>SELECT 'Ban' REGEXP '^Ba+n';
-> 1mysql>SELECT 'Bn' REGEXP '^Ba+n';
-> 0
a?
Соответствуйте или нуль или один a
символ.
mysql>SELECT 'Bn' REGEXP '^Ba?n';
-> 1mysql>SELECT 'Ban' REGEXP '^Ba?n';
-> 1mysql>SELECT 'Baan' REGEXP '^Ba?n';
-> 0
de|abc
Соответствуйте любую из последовательностей de
или abc
.
mysql>SELECT 'pi' REGEXP 'pi|apa';
-> 1mysql>SELECT 'axe' REGEXP 'pi|apa';
-> 0mysql>SELECT 'apa' REGEXP 'pi|apa';
-> 1mysql>SELECT 'apa' REGEXP '^(pi|apa)$';
-> 1mysql>SELECT 'pi' REGEXP '^(pi|apa)$';
-> 1mysql>SELECT 'pix' REGEXP '^(pi|apa)$';
-> 0
(abc)*
Нуль соответствия или больше экземпляров последовательности abc
.
mysql>SELECT 'pi' REGEXP '^(pi)*$';
-> 1mysql>SELECT 'pip' REGEXP '^(pi)*$';
-> 0mysql>SELECT 'pipi' REGEXP '^(pi)*$';
-> 1
{1}
, {2,3}
{n}
или {m,n}
нотация обеспечивает более
общий способ записать регулярные выражения, которые соответствуют много возникновений предыдущего
атома (или "часть") образца. m
и n
целые числа.
a*
Может быть записан как a{0,}
.
a+
Может быть записан как a{1,}
.
a?
Может быть записан как a{0,1}
.
Быть более точным, a{n}
соответствия точно n
экземпляры a
. a{n,}
соответствия n
или больше экземпляров
a
. a{m,n}
соответствия m
через n
экземпляры a
, включительно.
m
и n
должен быть в диапазоне от 0
к RE_DUP_MAX
(значение по умолчанию 255),
включительно. Если оба m
и n
даются, m
должно быть меньше чем или равным n
.
mysql>SELECT 'abcde' REGEXP 'a[bcd]{2}e';
-> 0mysql>SELECT 'abcde' REGEXP 'a[bcd]{3}e';
-> 1mysql>SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';
-> 1
[a-dX]
, [^a-dX]
Соответствия любой символ, который является (или нет, если ^ используется), также a
, b
, c
, d
или X
. A -
символ между двумя другими символами формирует диапазон, который соответствует все символы от
первого символа до второго. Например, [0-9]
соответствия любая
десятичная цифра. Включать литерал ]
символ, это должно сразу следовать
за вводной скобкой [
. Включать литерал -
символ, это должно быть записано сначала или последнее. Любой символ, у которого нет определенного
особого значения внутри a []
пара соответствует только непосредственно.
mysql>SELECT 'aXbc' REGEXP '[a-dXYZ]';
-> 1mysql>SELECT 'aXbc' REGEXP '^[a-dXYZ]$';
-> 0mysql>SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';
-> 1mysql>SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$';
-> 0mysql>SELECT 'gheis' REGEXP '^[^a-dXYZ]+$';
-> 1mysql>SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$';
-> 0
[.characters.]
В пределах выражения скобки (записанное использование [
и ]
), соответствует последовательность символов того элемента
сопоставления. characters
или единственный символ или имя персонажа как
newline
. Следующая таблица приводит допустимые имена персонажей.
Следующая таблица показывает допустимые имена персонажей и символы, что они соответствуют. Для символов, данных как числовые значения, значения представляются в восьмеричном.
Имя | Символ | Имя | Символ |
---|---|---|---|
NUL |
0 |
SOH |
001 |
STX |
002 |
ETX |
003 |
EOT |
004 |
ENQ |
005 |
ACK |
006 |
BEL |
007 |
alert |
007 |
BS |
010 |
backspace |
'\b' |
HT |
011 |
tab |
'\t' |
LF |
012 |
newline |
'\n' |
VT |
013 |
vertical-tab |
'\v' |
FF |
014 |
form-feed |
'\f' |
CR |
015 |
carriage-return |
'\r' |
SO |
016 |
SI |
017 |
DLE |
020 |
DC1 |
021 |
DC2 |
022 |
DC3 |
023 |
DC4 |
024 |
NAK |
025 |
SYN |
026 |
ETB |
027 |
CAN |
030 |
EM |
031 |
SUB |
032 |
ESC |
033 |
IS4 |
034 |
FS |
034 |
IS3 |
035 |
GS |
035 |
IS2 |
036 |
RS |
036 |
IS1 |
037 |
US |
037 |
space |
' ' |
exclamation-mark |
'!' |
quotation-mark |
'"' |
number-sign |
'#' |
dollar-sign |
'$' |
percent-sign |
'%' |
ampersand |
'&' |
apostrophe |
'\'' |
left-parenthesis |
'(' |
right-parenthesis |
')' |
asterisk |
'*' |
plus-sign |
'+' |
comma |
',' |
hyphen |
'-' |
hyphen-minus |
'-' |
period |
'.' |
full-stop |
'.' |
slash |
'/' |
solidus |
'/' |
zero |
'0' |
one |
'1' |
two |
'2' |
three |
'3' |
four |
'4' |
five |
'5' |
six |
'6' |
seven |
'7' |
eight |
'8' |
nine |
'9' |
colon |
':' |
semicolon |
';' |
less-than-sign |
'<' |
equals-sign |
'=' |
greater-than-sign |
'>' |
question-mark |
'?' |
commercial-at |
'@' |
left-square-bracket |
'[' |
backslash |
'\\' |
reverse-solidus |
'\\' |
right-square-bracket |
']' |
circumflex |
'^' |
circumflex-accent |
'^' |
underscore |
'_' |
low-line |
'_' |
grave-accent |
'`' |
left-brace |
'{' |
left-curly-bracket |
'{' |
vertical-line |
'|' |
right-brace |
'}' |
right-curly-bracket |
'}' |
tilde |
'~' |
DEL |
177 |
mysql>SELECT '~' REGEXP '[[.~.]]';
-> 1mysql>SELECT '~' REGEXP '[[.tilde.]]';
-> 1
[=character_class=]
В пределах выражения скобки (записанное использование [
и ]
), [=character_class=]
представляет
эквивалентный class. Это соответствует все символы с тем же самым значением сопоставления, включая
себя. Например, если o
и (+)
элементы
эквивалентного class, [[=o=]]
, [[=(+)=]]
,
и [o(+)]
все синонимичны. Эквивалентный class не может использоваться в
качестве конечной точки диапазона.
[:character_class:]
В пределах выражения скобки (записанное использование [
и ]
), [:character_class:]
представляет
символьный class, который соответствует все символы, принадлежащие тому class. Следующая таблица
приводит стандартные имена class. Эти имена обозначают классы символов, определенные в ctype(3)
страница руководства. Определенная локаль может обеспечить
другие имена class. Символьный class не может использоваться в качестве конечной точки диапазона.
Имя Класса символов | Значение |
---|---|
alnum |
Алфавитно-цифровые символы |
alpha |
Буквенные символы |
blank |
Пробельные символы |
cntrl |
Управляющие символы |
digit |
Символы цифры |
graph |
Графические символы |
lower |
Строчные буквенные символы |
print |
Графические или пробелы |
punct |
Символы пунктуации |
space |
Пространство, вкладка, новая строка, и возврат каретки |
upper |
Буквенные символы верхнего регистра |
xdigit |
Шестнадцатеричные символы цифры |
mysql>SELECT 'justalnums' REGEXP '[[:alnum:]]+';
-> 1mysql>SELECT '!!' REGEXP '[[:alnum:]]+';
-> 0
[[:<:]]
, [[:>:]]
Эти маркеры обозначают границы слова. Они соответствуют начало и конец слов, соответственно. Слово
является последовательностью символов слова, которой не предшествуют или сопровождается символами
слова. Символ слова является буквенно-цифровым знаком в alnum
class или
подчеркивание (_
).
mysql>SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';
-> 1mysql>SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';
-> 0
Чтобы использовать литеральный экземпляр специального символа в регулярном выражении, предшествуйте этому двумя
наклонными чертами влево (\) символы. Синтаксический анализатор MySQL интерпретирует одну из наклонных черт
влево, и библиотека регулярных выражений интерпретирует другой. Например, чтобы соответствовать строку 1+2
это содержит специальное предложение +
символ,
только последним из следующих регулярных выражений является корректное:
mysql>SELECT '1+2' REGEXP '1+2';
-> 0mysql>SELECT '1+2' REGEXP '1\+2';
-> 0mysql>SELECT '1+2' REGEXP '1\\+2';
-> 1