MySQL има редица функции и оператори, които ни позволяват да извършваме операции с помощта на регулярни изрази (regex). Тази статия представя два оператора и една функция, които ни позволяват да разберем дали низ съответства на регулярен израз, определен от даден шаблон.
Тези функции и оператори за регулярни изрази са:
REGEXP_LIKE()
REGEXP
RLIKE
Всички те са основно еквивалентни, тъй като операторите (вторите два) са синоними на функцията (първата). Във всеки случай можете да видите примери и за трите в действие по-долу.
REGEXP_LIKE()
Функция
Първо, нека разгледаме функцията. Ето пример за стартиране на търсене на регулярни изрази с помощта на REGEXP_LIKE()
функция:
SELECT REGEXP_LIKE('Car', '^C') AS 'Match', REGEXP_LIKE('Bar', '^C') AS 'No Match';
Резултат:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
Първият низ съвпада (защото започва с C ), така че резултатът е 1
. Вторият низ не съвпада и така резултатът е 0
.
Тази функция обаче може да бъде много по-полезна от просто връщане на 1
или 0
. Например, може да се добави към WHERE
клауза при запитване към база данни. В този случай можем да получим списък с редове, които съдържат съвпадение за шаблона.
Ето един пример:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Резултат:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Ето пълната таблица:
SELECT AlbumId, AlbumName FROM Albums;
Резултат:
+---------+--------------------------+ | AlbumId | AlbumName | +---------+--------------------------+ | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | +---------+--------------------------+
REGEXP
Оператор
Ето как да направите същото с помощта на REGEXP
оператор:
SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
Резултат:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
И примерът с базата данни:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
Резултат:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Можете също да използвате NOT REGEXP
за да върнете обратния резултат.
RLIKE
Оператор
И тук използва RLIKE
:
SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
Резултат:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
И примерът с базата данни:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
Резултат:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
В този случай просто смених REGEXP
за RLIKE
и остави останалата част от кода сама.
Можете също да използвате NOT RLIKE
за да върнете обратния резултат.
Още REGEX функции
MySQL включва и няколко други функции и оператори за регулярни изрази. Три от тях са изброени по-долу. Технически, можете също да използвате първите два, за да „откриете“ дали даден низ съответства на модел на регулярни изрази (в този случай може би тази статия трябва да бъде озаглавена „5 начина за откриване дали низ съответства на регулярен израз в MySQL“, вместо просто „ 3 начина...”).
Както и да е, ето още три функции за регулярни изрази:
- Можете да използвате
REGEXP_INSTR()
функция за връщане на началния индекс на подниз, който съответства на модела на регулярния израз. REGEXP_SUBSTR()
функцията връща подниз, който съответства на дадения модел на регулярен израз.- И
REGEXP_REPLACE()
функцията заменя появата на подниз в низ, който съответства на дадения модел на регулярен израз.