English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В предыдущих главах мы уже узнали, что 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$';