MySQL má řadu funkcí a operátorů, které nám umožňují provádět operace pomocí regulárních výrazů (regex). Tento článek představuje dva operátory a jednu funkci, které nám umožňují zjistit, zda řetězec odpovídá regulárnímu výrazu určenému daným vzorem.
Tyto funkce a operátory regulárních výrazů jsou:
REGEXP_LIKE()
REGEXP
RLIKE
Všechny jsou v zásadě ekvivalentní, protože oba operátory (druhé dva) jsou synonyma funkce (první). V každém případě níže můžete vidět příklady všech tří v akci.
REGEXP_LIKE()
Funkce
Nejprve se podívejme na funkci. Zde je příklad spuštění vyhledávání regulárních výrazů pomocí REGEXP_LIKE()
funkce:
SELECT REGEXP_LIKE('Car', '^C') AS 'Match', REGEXP_LIKE('Bar', '^C') AS 'No Match';
Výsledek:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
První řetězec odpovídá (protože začíná C ), takže výsledek je 1
. Druhý řetězec se neshoduje, takže výsledek je 0
.
Tato funkce však může být mnohem užitečnější než pouhé vrácení 1
nebo 0
. Může být například přidán do WHERE
klauzule při dotazu na databázi. V tomto případě můžeme získat seznam řádků, které obsahují shodu se vzorem.
Zde je příklad:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Výsledek:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Zde je úplná tabulka:
SELECT AlbumId, AlbumName FROM Albums;
Výsledek:
+---------+--------------------------+ | 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
Operátor
Zde je návod, jak provést stejnou věc pomocí REGEXP
operátor:
SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
Výsledek:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
A příklad databáze:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
Výsledek:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Můžete také použít NOT REGEXP
vrátíte opačný výsledek.
RLIKE
Operátor
A zde je to pomocí RLIKE
:
SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
Výsledek:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
A příklad databáze:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
Výsledek:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
V tomto případě jsem jednoduše vyměnil REGEXP
pro RLIKE
a zbytek kódu nechal na pokoji.
Můžete také použít NOT RLIKE
vrátíte opačný výsledek.
Další funkce REGEX
MySQL také obsahuje několik dalších funkcí a operátorů regulárních výrazů. Tři z nich jsou uvedeny níže. Technicky můžete první dva použít také k „detekci“, zda řetězec odpovídá vzoru regulárního výrazu (v takovém případě by tento článek měl mít název „5 způsobů, jak zjistit, zda řetězec odpovídá regulárnímu výrazu v MySQL“ namísto pouhého „ 3 způsoby…”).
Každopádně zde jsou další tři funkce regulárního výrazu:
- Můžete použít
REGEXP_INSTR()
funkce, která vrátí počáteční index podřetězce, který odpovídá vzoru regulárního výrazu. REGEXP_SUBSTR()
funkce vrací podřetězec, který odpovídá danému vzoru regulárního výrazu.- A
REGEXP_REPLACE()
funkce nahradí výskyty podřetězce v řetězci, který odpovídá danému vzoru regulárního výrazu.