In MySQL is de REGEXP_SUBSTR()
functie retourneert de subtekenreeks die overeenkomt met het gegeven patroon voor reguliere expressies.
Als er geen overeenkomst is (d.w.z. de invoertekenreeks bevat de subtekenreeks niet), is het resultaat NULL
.
Syntaxis
De syntaxis gaat als volgt:
REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
Waar expr
is de invoerreeks en pat
is het reguliere expressiepatroon voor de subtekenreeks.
De optionele pos
argument stelt u in staat om een positie in de tekenreeks op te geven om de zoekopdracht te starten. Indien weggelaten, begint het op positie 1.
Het optionele occurrence
argument stelt u in staat om te specificeren naar welk exemplaar van de overeenkomst moet worden gezocht. Indien weggelaten, wordt de eerste instantie gebruikt (gebeurtenis 1).
Het optionele match_type
argument kunt u de reguliere expressie verfijnen. U kunt dit argument bijvoorbeeld gebruiken om hoofdlettergevoelige overeenkomsten op te geven of niet.
Voorbeeld 1 – Basisgebruik
Hier is een eenvoudig voorbeeld:
SELECT REGEXP_SUBSTR('Thailand or Cambodia', 'l.nd') Result;
Resultaat:
+--------+ | Result | +--------+ | land | +--------+
In dit geval is er een overeenkomst en wordt de subtekenreeks geretourneerd.
Voorbeeld 2 – Meerdere overeenkomsten
Als er meerdere overeenkomsten in de tekenreeks zijn, wordt standaard de eerste geretourneerd (hoewel u indien nodig een andere instantie kunt opgeven. Daar komen we snel op terug):
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd') Result;
Resultaat:
+--------+ | Result | +--------+ | Lend | +--------+
Voorbeeld 3 – Geen overeenkomst
Hier is een voorbeeld waarbij er geen overeenkomst is:
SELECT REGEXP_SUBSTR('Lend for land', '^C') Result;
Resultaat:
+--------+ | Result | +--------+ | NULL | +--------+
Er is geen overeenkomst, dus het resultaat is NULL
.
Voorbeeld 4 – De pos
Argument
Hier is een voorbeeld van het specificeren van een startpositie:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) Result;
Resultaat:
+--------+ | Result | +--------+ | Cut | +--------+
We zijn begonnen op positie 2, die komt na het begin van het eerste exemplaar, dus in plaats daarvan wordt het volgende exemplaar geretourneerd.
Hier is nog een voorbeeld:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1) 'Pos 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) 'Pos 2', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 6) 'Pos 6';
Resultaat:
+-------+-------+-------+ | Pos 1 | Pos 2 | Pos 6 | +-------+-------+-------+ | Cat | Cut | Cot | +-------+-------+-------+
Voorbeeld 5 – Het occurrence
Argument
Hier is een voorbeeld van het gebruik van de occurrence
argument. In alle gevallen beginnen we op positie 1:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 1) 'Occurrence 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 2) 'Occurrence 2', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 1, 3) 'Occurrence 3';
Resultaat:
+--------------+--------------+--------------+ | Occurrence 1 | Occurrence 2 | Occurrence 3 | +--------------+--------------+--------------+ | Cat | Cut | Cot | +--------------+--------------+--------------+
Als we echter op een andere positie beginnen, is het resultaat anders:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 1) 'Occurrence 1', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 2) 'Occurrence 2', REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2, 3) 'Occurrence 3';
Resultaat:
+--------------+--------------+--------------+ | Occurrence 1 | Occurrence 2 | Occurrence 3 | +--------------+--------------+--------------+ | Cut | Cot | NULL | +--------------+--------------+--------------+
Dit gebeurde omdat onze startpositie kwam nadat het eerste voorval was begonnen. Daarom werd voorval 2 voorval 1 en voorval 3 werd voorval 2. En omdat er geen voorvallen meer waren, was het resultaat van voorval 3 NULL (d.w.z. er was geen voorval 3).
Voorbeeld 6 – Het match_type
Argument
U kunt een extra argument opgeven om het zoektype te bepalen. Hiermee kunt u dingen specificeren zoals of de overeenkomst hoofdlettergevoelig is, of u lijnafsluitingen wilt opnemen, enz.
Hier is een voorbeeld van het specificeren van een hoofdlettergevoelige overeenkomst en een hoofdletterongevoelige overeenkomst:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'c.t', 1, 1, 'c') 'Case-Sensitive', REGEXP_SUBSTR('Cat Cut Cot', 'c.t', 1, 1, 'i') 'Case-Insensitive';
Resultaat:
+----------------+------------------+ | Case-Sensitive | Case-Insensitive | +----------------+------------------+ | NULL | Cat | +----------------+------------------+
Het match_type
argument kan de volgende tekens bevatten:
c
- Hoofdlettergevoelige overeenkomst.
i
- Hoofdletterongevoelige overeenkomst.
m
- Modus met meerdere regels. Herken lijnafsluitingen binnen de string. Het standaardgedrag is om regelafsluitingen alleen aan het begin en einde van de tekenreeksuitdrukking te laten overeenkomen.
n
- De
.
karakter komt overeen met regelafsluitingen. De standaard is voor.
overeenkomend om te stoppen aan het einde van een regel. u
- Alleen Unix regeleindes. Alleen het teken van de nieuwe regel wordt herkend als een regel die eindigt met de
.
,^
, en$
match operators.