sql >> Database >  >> RDS >> Mysql

Hoe de REGEXP_SUBSTR()-functie werkt in MySQL

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.

  1. Fout tijdens het verzenden van QUERY-pakket

  2. SQL Server REPLACE() vs TRANSLATE():wat zijn de verschillen?

  3. psycopg2 voegt eigenlijk geen gegevens in

  4. Hoe maak je een procedure in Oracle SQL Developer?