MySQLi - регулярные выражения
Вы видели сопоставление шаблонов MySQLi с помощью LIKE ...%. MySQLi поддерживает другой тип операции сопоставления с образцом на основе регулярных выражений иREGEXPоператор. Если вы знакомы с PHP или PERL, то это очень просто понять, потому что это сопоставление очень похоже на те регулярные выражения сценариев.
Ниже приводится таблица выкройки, которую можно использовать вместе с REGEXP оператор.
Шаблон | Что соответствует шаблону |
---|---|
^ | Начало строки |
$ | Конец строки |
. | Любой одиночный персонаж |
[...] | Любой символ, указанный в квадратных скобках |
[^ ...] | Любой символ, не указанный в квадратных скобках |
p1 | p2 | p3 | Чередование; соответствует любому из шаблонов p1, p2 или p3 |
* | Ноль или более экземпляров предыдущего элемента |
+ | Один или несколько экземпляров предыдущего элемента |
{n} | n экземпляров предыдущего элемента |
{m, n} | от m до n экземпляров предыдущего элемента |
Примеры
Теперь на основе приведенной выше таблицы вы можете создавать различные типы SQL-запросов в соответствии с вашими требованиями. Здесь я перечисляю несколько для вашего понимания. Предположим, у нас есть таблица с именем tutorials_inf, в которой есть поле с именем name -
Запрос, чтобы найти все имена, начинающиеся с 'sa'
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP '^sa';
Пример вывода должен быть таким -
+----+------+
| id | name |
+----+------+
| 1 | sai |
+----+------+
1 row in set (0.00 sec)
Запрос, чтобы найти все имена, заканчивающиеся на 'ai'
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'ai$';
Пример вывода должен быть таким -
+----+------+
| id | name |
+----+------+
| 1 | sai |
+----+------+
1 row in set (0.00 sec)
Запрос на поиск всех имен, содержащих 'a'
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'a';
Пример вывода должен быть таким -
+----+-------+
| id | name |
+----+-------+
| 1 | sai |
| 3 | ram |
| 4 | johar |
+----+-------+
3 rows in set (0.00 sec)
Запрос на поиск всех имен, начинающихся с гласной
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP '^[aeiou]';