I MySQL, REGEXP_LIKE()
funktion används för att avgöra om en sträng matchar ett reguljärt uttryck eller inte.
Funktionen returnerar 1
om strängen matchar det angivna reguljära uttrycket och 0
om det inte gör det.
Syntax
Syntaxen ser ut så här:
REGEXP_LIKE(expr, pat[, match_type])
Där expr
är inmatningssträngen och pat
är det reguljära uttrycket som du testar strängen mot.
Den valfria match_type
argument låter dig förfina det reguljära uttrycket. Du kan till exempel använda match_type
för att ange skiftlägeskänslig matchning eller inte.
Exempel 1 – Grundläggande användning
Här är ett grundläggande exempel:
SELECT REGEXP_LIKE('Cat', '.*') Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
I det här fallet anger vårt reguljära uttryck vilket tecken som helst i vilken sekvens som helst, så vi får naturligtvis en matchning. Funktionen returnerar 1
för att indikera en matchning.
Exempel 2 – Ingen matchning
Här är ett exempel där inmatningssträngen inte matchar det reguljära uttrycket:
SELECT REGEXP_LIKE('Cat', 'b+') Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
I det här fallet anger vårt reguljära uttryck att det ska finnas en eller flera b
tecken i valfri sekvens. Vår indatasträng innehåller inte detta tecken och därför 0
returneras.
Exempel 3 – Matcha början av en sträng
Här är ett exempel där det reguljära uttrycket anger att strängen måste börja med vissa tecken:
SELECT REGEXP_LIKE('Cat', '^Ca') Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Och här är vad som händer om det inte finns någon matchning:
SELECT REGEXP_LIKE('Cat', '^Da') Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Exempel 4 – En databasfråga
Denna funktion kan användas i WHERE
klausul i databasfrågor för att endast returnera de rader som innehåller mönstret:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Resultat:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Här är hela tabellen:
SELECT AlbumId, AlbumName FROM Albums;
Resultat:
+---------+--------------------------+ | 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 | +---------+--------------------------+
Exempel 5 – match_type
Argument
Du kan ange ytterligare ett argument för att bestämma matchningstypen. Detta låter dig specificera saker som om matchningen är skiftlägeskänslig eller inte, om linjeavslutare ska inkluderas eller inte, etc.
Här är ett exempel på hur du anger en skiftlägeskänslig matchning och en skiftlägesokänslig matchning:
SELECT REGEXP_LIKE('Cat', '^ca', 'c') 'Case-Sensitive', REGEXP_LIKE('Cat', '^ca', 'i') 'Case-Insensitive';
Resultat:
+----------------+------------------+ | Case-Sensitive | Case-Insensitive | +----------------+------------------+ | 0 | 1 | +----------------+------------------+
match_type
argument kan innehålla följande tecken:
c
- Skaftkänslig matchning.
i
- Verkskiftsokänslig matchning.
m
- Flerradsläge. Känn igen linjeavslutare i strängen. Standardbeteendet är att matcha linjeavslutare endast i början och slutet av stränguttrycket.
n
. tecken matchar radavslutare. Standard är för .
matchar för att stanna i slutet av en rad.u
- Enbart Unix-radändelser. Endast nyradstecknet känns igen som en rad som slutar med
.
,^
och$
matcha operatorer.
Fler exempel
Du kan se fler exempel på grundläggande reguljära uttryck på MySQL REGEXP Exempel. REGEXP
är en synonym för REGEXP_LIKE()
, så att du kan använda exemplen omväxlande.
Se även Syntax för reguljära uttryck från MySQL-dokumentationen.