В этом учебном пособии вы узнаете, как использовать MariaDB функцию REGEXP с синтаксисом и примерами.
Описание
MariaDB функция REGEXP позволяет выполнять сопоставление регулярных выражений.
Синтаксис
Синтаксис функции REGEXP в MariaDB:
Параметры или аргументы
- expression
- Символьное выражение, такое как поле или столбец.
- pattern
- Информация о совпадении регулярного выражения. Это может быть сочетание следующего:
Значение Описание ^ Соответствует началу строки. Если используется с match_parameter, равным 'm', он соответствует началу строки в любом месте expression. $ Соответствует концу строки. Если используется с match_parameter, равным 'm', он совпадает с концом строки в любом месте внутри expression. * Совпадает с нулем или более вхождений. + Соответствует одному или нескольким вхождениям. ? Соответствует нулю или одному вхождению. . Соответствует любому символу, кроме NULL. | Используется как OR указать более одной альтернативы. [ ] Используется для указания списка совпадений, в котором вы пытаетесь сопоставить любой из символов в списке. [^ ] Используется для указания несоответствующего списка, в котором вы пытаетесь сопоставить любой символ, кроме тех, что в списке. ( ) Используется для группировки выражений как подвыражения. {m} Соответствует m раз. {m,} Совпадает не менее m раз. {m,n} Соответствует не менее m раз, но не более n раз. \n n - это число от 1 до 9. Соответствует n-му подвыражению, найденному в () перед тем, как встретить \n. [..] Соответствует одному элементу сопоставления, который может содержать более одного символа. [::] Соответствует классу символов. [==] Соответствует классу эквивалентности. \d Соответствует цифровому символу. \D Соответствует нецифровому символу. \w Соответствует буквенному символу. \W Соответствует небуквенному символу. \s Соответствует пробелу. \S Соответствует непробельному символу. *? Соответствует предыдущему шаблону ноль или более вхождений. +? Соответствует предыдущему шаблону одному или нескольким вхождениям. ?? Соответствует предыдущему шаблону ноль или одно вхождение. {n}? Соответствует предыдущему шаблону n раз. {n,}? Соответствует предыдущему шаблону не менее n раз. {n,m}? Соответствует предыдущему шаблону не менее n раз, но не более m раз.
Примечание
- Функция REGEXP выполняет сопоставление без учета регистра, за исключением случаев, когда используются двоичные строк
- Эта страница относится к MariaDB 10.0.5 и выше, использующим библиотеку регулярных выражений PCRE. До версии MariaDB 10.0.5 функция REGEXP использовала POSIX 1003.2-совместимую библиотеку регулярных выражений.
Применение
Функцию REGEXP можно использовать в следующих версиях MariaDB:
- MariaDB 10.0.5+
Пример совпадение на нескольких альтернативах
Давайте начнем с рассмотрения того, как использовать шаблон |
с функцией REGEXP в MariaDB.
Например:
1 2 3 |
SELECT product_name FROM products WHERE product_name REGEXP 'P(a|e|i)n'; |
Этот пример REGEXP вернет все записи из таблицы products с product_name, которых являются Pan, Pen или Pin. Шаблон |
подсказывает нам искать букву 'a', 'e' или 'i'.
Пример совпадение по началу
Далее, давайте воспользуемся функцией REGEXP для сопоставления начала строк.
Например:
1 2 3 |
SELECT product_id, product_name FROM products WHERE product_name REGEXP '^P'; |
В этом примере REGEXP используется шаблон ^
для сопоставления в начале строки. Он вернет все значения product_id и product_name, где product_name начинается с 'P'.
Поскольку функция REGEXP выполняет сопоставление без учета регистра (кроме двоичной строки), оно будет эквивалентно следующему:
1 2 3 |
SELECT product_id, product_name FROM products WHERE product_name REGEXP '^p'; |
Оба запроса будут возвращать одинаковые результаты.
Пример совпадение в конце
Далее, давайте воспользуемся функцией REGEXP для сопоставления конца строки.
Например:
1 2 3 |
SELECT * FROM products WHERE product_name REGEXP 'n$'; |
Этот пример REGEXP использует шаблон $
для сопоставления в конце строки. Он вернет все строки таблицы products, чье product_name оканчивается на 'n'.
Пример несоответствующий список
Далее, давайте использовать функцию REGEXP, чтобы определить несоответствующий список. Это означает, что вы пытаетесь сопоставить любой символ, кроме тех, что в списке.
Например:
1 2 3 |
SELECT * FROM products WHERE product_name REGEXP 'P[^a]n'; |
В этом примере шаблон [^]
используется для соответствия любому символу, кроме перечисленных. Он вернет все записи из таблицы products, где первый символ product_name - 'P', второй - не 'a', а третий - 'n'. Таким образом, это будет включать такие значения, как "Pen", "Pin", "Pon" или "Pun", но исключит значение "Pan" из набора результатов.
Вы можете еще больше усложнить этот пример, добавив более одного символа, чтобы он не совпадал.
Например:
1 2 3 |
SELECT * FROM products WHERE product_name REGEXP 'P[^ai]n'; |
В этом примере будут возвращены все записи из таблицы products, где первым символом product_name является 'P', вторым символом не 'a' или 'i', и третий символ 'n'. Таким образом, это будет включать такие значения, как "Pen", "Pon" или "Pun", но исключать значения "Pan" и "Pin" из набора результатов.
Пример сопоставление классов символов
Теперь давайте посмотрим, как использовать функцию REGEXP для сопоставления классов символов в MariaDB.
Вы можете использовать следующие классы символов с функцией REGEXP в MariaDB:
Символьный класс | Описание |
---|---|
alnum | Буквенно-цифровые символы |
alpha | Буквенные символы |
blank | Пробельные символы |
cntrl | Управляющие символы |
digit | цифры |
graph | Графические символы |
lower | Буквенные символы в нижнем регистре |
Графические или пробельные символы | |
punct | Символы пунктуации |
space | Такие символы, как возврат каретки, перевод строки, пробел и табуляция |
upper | Прописные буквенные символы |
xdigit | Шестнадцатеричные цифры |
Рассмотрим пример соответствия классов символов с помощью функции REGEXP.
Например:
1 2 3 |
SELECT * FROM contacts WHERE address REGEXP '123[:alnum:]*'; |
В этом примере функция REGEXP будет возвращать все записи из таблицы contacts, где адрес начинается с 123, а затем остальные символы являются буквенно-цифровыми символами.
Пример экранирования символов
В последнем примере объясняется, как экранировать специальные символы при использовании функции REGEXP в MariaDB. Чтобы экранировать специальный символ с помощью функции REGEXP, необходимо добавить перед специальным символом две обратных косых черты \\
.
Например:
1 2 3 |
SELECT * FROM products WHERE product_name REGEXP '\\('; |
В этом примере мы экранировали символ (
(левая скобка), поэтому функция REGEXP вернет все записи из таблицы products, где product_name содержит символ (
.