Использование регулярных выражений в MySQL

задняя часть MySQL
Использование регулярных выражений в MySQL

«Это 18-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."

1. Введение

Сопоставление регулярных выражений поддерживается в MySQL.В сложных условиях фильтрации вы можете рассмотреть возможность использования регулярных выражений. Чтобы использовать регулярные выражения, вам необходимо освоить синтаксис регулярных выражений и инструкции. Xiaoba рекомендует адрес для обучения и онлайн-инструмент. Прежде чем научиться использовать регулярные выражения в MySQL, узнайте о синтаксисе и инструкциях регулярных выражений.

URL для обучения регулярным выражениям:

WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OFF.COM/RE-XP/HOT SONG ...

Онлайн-тест регулярного выражения:

С.runohohby.com/front-end/8…

Стоит отметить, что регулярные выражения, поддерживаемые MySQL, являются лишь подмножеством множества реализаций регулярных выражений, и перед их использованием рекомендуется протестировать их.При тестировании нет необходимости сначала создавать таблицу и вставлять данные.Вы можете напрямую использовать select, чтобы опустить предложение формы и обработать выражения удобным способом, например следующим образом:

mysql> select '我爱你中国' regexp '我爱你';
+------------------------------+
| '我爱你中国' regexp '我爱你' |
+------------------------------+
|                            1 |
+------------------------------+
mysql> select '12306' regexp '[:digit:]';
+----------------------------+
| '12306' regexp '[:digit:]' |
+----------------------------+
|                          1 |
+----------------------------+

2. Текст

Сначала подготовьте таблицу продуктов.DDL и данные таблицы следующие, которые можно копировать и использовать напрямую.

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `product_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '产品名称',
  `price` decimal(10, 2) UNSIGNED NOT NULL COMMENT '产品价格',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of product
-- ----------------------------
INSERT INTO `product` VALUES (1, 'Apple iPhone 13 (A2634)', 6799.00);
INSERT INTO `product` VALUES (2, 'HUAWEI P50 Pro', 6488.00);
INSERT INTO `product` VALUES (3, 'MIX4', 4999.00);
INSERT INTO `product` VALUES (4, 'OPPO Find X3', 3999.00);
INSERT INTO `product` VALUES (5, 'vivo X70 Pro+', 5999.00);

SET FOREIGN_KEY_CHECKS = 1;

Исходные данные выглядят так:

mysql> select * from product;
+----+-------------------------+---------+
| id | product_name            | price   |
+----+-------------------------+---------+
|  1 | Apple iPhone 13 (A2634) | 6799.00 |
|  2 | HUAWEI P50 Pro          | 6488.00 |
|  3 | MIX4                    | 4999.00 |
|  4 | OPPO Find X3            | 3999.00 |
|  5 | vivo X70 Pro+           | 5999.00 |
+----+-------------------------+---------+

2.1 Порядок выписки

Роль регулярных выражений заключается в сопоставлении текста. Использование регулярного выражения для сравнения с текстовым содержимым позволяет проверить, соответствует ли текст правилам, описанным регулярным выражением.В MySQL регулярные выражения используются в предложении where для фильтрации данных запроса на выборку.

select * from table_name where regexp "ваше регулярное выражение" order by cloumn_name;


нужно:

Запросите продукт, название продукта которого содержит 3 в таблице продуктов

Заявление:

mysql> select * from product where product_name regexp '3';

результат:

+----+-------------------------+---------+
| id | product_name            | price   |
+----+-------------------------+---------+
|  1 | Apple iPhone 13 (A2634) | 6799.00 |
|  4 | OPPO Find X3            | 3999.00 |
+----+-------------------------+---------+

2.2 Как быть чувствительным к регистру

MySQL использует регулярные выражения, которые по умолчанию нечувствительны к регистру, но в большинстве случаев нам нужно сопоставить верхний и нижний регистр английского языка.В настоящее время мы можем использоватьbinaryключевые слова.

нужно:

Запрос продуктов, название которых содержит слово huawei в таблице продуктов

Заявление:

mysql> select * from product where product_name regexp  'huawei';

результат:

+----+----------------+---------+
| id | product_name   | price   |
+----+----------------+---------+
|  2 | HUAWEI P50 Pro | 6488.00 |
+----+----------------+---------+

В настоящее время результат запроса по умолчанию нечувствителен к регистру, поэтому его можно запросить напрямую.Если мы хотим, чтобы запрос был чувствителен к регистру, нам нужно только добавить двоичное ключевое слово после regexp.

Заявление:

mysql> select * from product where product_name regexp binary 'huawei';

результат:

Empty set (0.00 sec)

Поскольку таблица продуктов не содержит продуктов со строчной буквой huawei, возвращаемый результат — Пустой набор.

2.3 Отличие регулярных выражений от подобных

Некоторые считают, что небольшие партнеры для достижения вышеуказанного открытия, на самом деле, с подобным может быть достигнуто. Во многих сценах нам нравится использовать для сопоставления строк, но эти сцены часто очень просты, а регулярные выражения являются очень мощными инструментами фильтрации текстового поиска, они могут иметь много более мощных друзей, чем подобные операторы. Короче делать как регулярные выражения можно, это значит что в принципе не нравится делать (или хитро).

Например, следующие требования можно легко реализовать с помощью регулярных выражений, но оператор like не знает, как их реализовать.

нужно:

В таблице продуктов запроса информация о продукте появляется хотя бы один раз в названии продукта.

Заявление:

mysql> select * from product where product_name regexp 'v+';

результат:

+----+---------------+---------+
| id | product_name  | price   |
+----+---------------+---------+
|  5 | vivo X70 Pro+ | 5999.00 |
+----+---------------+---------+

Примечание. Регулярные выражения тяжелые.метасимволСовпадения - это все последовательные события. Эти повторяющиеся метасимволы приведены ниже, и я чувствую, что некоторые друзья поймут их неправильно.

повторяющиеся метасимволы

метасимвол иллюстрировать
* 0 или более совпадений, эффект такой же, как у {0,}
+ 1 или более совпадений, эффект такой же, как {1,}
? 1 или 0 соответствует, эффект такой же, как {0,1}
{n} равно количеству n совпадений
{n,} совпадений больше или равно n
{n,m} Больше или равно n и меньше или равно m, m