English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Регулярные выражения MySQL

В предыдущих главах мы уже узнали, что MySQL можно использовать через LIKE ...% для неопределенного соответствия.

MySQL также поддерживает другие модели регулярных выражений, в MySQL используется оператор REGEXP для выполнения поиска по регулярным выражениям.

Если вы знакомы с PHP или Perl, то работа с ними очень проста, потому что регулярные выражения MySQL совместимы с этими скриптами.

Приведенные в таблице выше регулярные модели могут быть применены к оператору REGEXP.

МодельОписание
^Совпадает с началом строки ввода. Если установлено свойство Multiline对象的 RegExp, '^' также совпадает с положением после '\n' или '\r'.
$Совпадает с концом строки ввода. Если установлено свойство Multiline对象的 RegExp, '$' также совпадает с положением перед '\n' или '\r'.
.Совпадает с любым одним символом, кроме '\n'. Чтобы совпадать с любым символом, включая '\n', используйте шаблон '[.\n]'.
[...]Группа символов. Совпадает с любым символом, включенным в нее. Например, '[abc]' может совпадать с 'a' в 'plain'.
[^...]Отрицательная группа символов. Совпадает с любым символом, не включенным в нее. Например, '[^abc]' может совпадать с 'p' в 'plain'.
p1|p2|p3Совпадает с p1 или p2 или p3. Например, 'z|food' может совпадать с 'z' или 'food'. '(z|f)ood' совпадает с 'zood' или 'food'.
*Совпадает с предыдущим подвыражением ноль или несколько раз. Например, 'zo*' может совпадать с 'z' и 'zoo'. '*' эквивалентен {0,}.
+Совпадает с предыдущим подвыражением один или несколько раз. Например, 'zo+' может совпадать с 'zo' и 'zoo', но не может совпадать с 'z'. '+' эквивалентен {1,}.
{n}n является ненулевым целым числом. Совпадает с определенным n раз. Например, 'o{2}' не может совпадать с 'o' в 'Bob', но может совпадать с двумя 'o' в 'food'.
{n,m}m и n являются ненулевыми целыми числами, где n <= m. Минимальное количество совпадений n и максимальное количество совпадений m.

Онлайн примеры

После понимания вышеуказанных требований к регулярным выражениям, мы можем написать SQL-запросы с регулярными выражениями, соответствующие нашим потребностям. Ниже мы приведем несколько примеров (имя таблицы: person_tbl) для улучшения нашего понимания:

Найти все данные в поле name, начинающиеся на строку 'st':

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

Найти все данные в поле name, заканчивающиеся на строку 'ok':

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

Найти все данные в поле name, содержащие строку 'mar':

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

Найти все данные в поле name, начинающиеся с гласной буквы или заканчивающиеся на строку 'ok':

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';