W MySQL funkcja REGEXP_SUBSTR()
funkcja zwraca podciąg pasujący do podanego wzorca wyrażenia regularnego.
Jeśli nie ma dopasowania (tzn. ciąg wejściowy nie zawiera podciągu), wynikiem jest NULL
.
Składnia
Składnia wygląda tak:
REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
Gdzie expr
jest ciągiem wejściowym i pat
jest wzorcem wyrażenia regularnego dla podłańcucha.
Opcjonalny pos
argument pozwala określić pozycję w ciągu, aby rozpocząć wyszukiwanie. Jeśli zostanie pominięty, zaczyna się od pozycji 1.
Opcjonalne occurrence
argument pozwala określić, które wystąpienie dopasowania ma zostać wyszukane. W przypadku pominięcia używane jest pierwsze wystąpienie (wystąpienie 1).
Opcjonalny match_type
argument umożliwia doprecyzowanie wyrażenia regularnego. Na przykład możesz użyć tego argumentu, aby określić dopasowanie z uwzględnieniem wielkości liter lub nie.
Przykład 1 – Podstawowe użycie
Oto podstawowy przykład:
SELECT REGEXP_SUBSTR('Thailand or Cambodia', 'l.nd') Result;
Wynik:
+--------+ | Result | +--------+ | land | +--------+
W tym przypadku występuje dopasowanie i podciąg jest zwracany.
Przykład 2 – Wiele meczów
Domyślnie, jeśli w ciągu jest wiele dopasowań, zwracane jest pierwsze z nich (chociaż w razie potrzeby możesz określić inne wystąpienie. Wkrótce do tego dojdziemy):
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd') Result;
Wynik:
+--------+ | Result | +--------+ | Lend | +--------+
Przykład 3 – Brak dopasowania
Oto przykład, w którym nie ma dopasowania:
SELECT REGEXP_SUBSTR('Lend for land', '^C') Result;
Wynik:
+--------+ | Result | +--------+ | NULL | +--------+
Brak dopasowania, więc wynik to NULL
.
Przykład 4 – pos
Argument
Oto przykład określenia pozycji początkowej:
SELECT REGEXP_SUBSTR('Cat Cut Cot', 'C.t', 2) Result;
Wynik:
+--------+ | Result | +--------+ | Cut | +--------+
Zaczęliśmy od pozycji 2, która pojawia się po rozpoczęciu pierwszego wystąpienia, więc zamiast tego zwracane jest następne wystąpienie.
Oto kolejny przykład:
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';
Wynik:
+-------+-------+-------+ | Pos 1 | Pos 2 | Pos 6 | +-------+-------+-------+ | Cat | Cut | Cot | +-------+-------+-------+
Przykład 5 – occurrence
Argument
Oto przykład użycia occurrence
argument. We wszystkich przypadkach zaczynamy od pozycji 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';
Wynik:
+--------------+--------------+--------------+ | Occurrence 1 | Occurrence 2 | Occurrence 3 | +--------------+--------------+--------------+ | Cat | Cut | Cot | +--------------+--------------+--------------+
Jeśli jednak zaczniemy od innej pozycji, wynik będzie inny:
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';
Wynik:
+--------------+--------------+--------------+ | Occurrence 1 | Occurrence 2 | Occurrence 3 | +--------------+--------------+--------------+ | Cut | Cot | NULL | +--------------+--------------+--------------+
Stało się tak, ponieważ nasza pozycja wyjściowa pojawiła się po rozpoczęciu pierwszego zdarzenia. Dlatego wystąpienie 2 stało się wystąpieniem 1, a wystąpienie 3 stało się wystąpieniem 2. A ponieważ nie było więcej wystąpień, wynik wystąpienia 3 był NULL (tj. nie było wystąpienia 3).
Przykład 6 – match_type
Argument
Możesz podać dodatkowy argument, aby określić typ dopasowania. Pozwala to określić takie rzeczy, jak rozróżnianie wielkości liter w dopasowaniu, uwzględnienie terminatorów linii itp.
Oto przykład określenia dopasowania z rozróżnianiem wielkości liter i dopasowania bez rozróżniania wielkości liter:
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';
Wynik:
+----------------+------------------+ | Case-Sensitive | Case-Insensitive | +----------------+------------------+ | NULL | Cat | +----------------+------------------+
match_type
argument może zawierać następujące znaki:
c
- Rozróżnianie wielkości liter.
i
- Dopasowywanie bez rozróżniania wielkości liter.
m
- Tryb wielowierszowy. Rozpoznaj terminatory wiersza w ciągu. Domyślnym zachowaniem jest dopasowywanie terminatorów linii tylko na początku i na końcu wyrażenia łańcuchowego.
n
.
znak pasuje do terminatorów linii. Wartość domyślna to.
dopasowanie, aby zatrzymać się na końcu linii.u
- Zakończenia linii tylko dla Uniksa. Tylko znak nowej linii jest rozpoznawany jako linia kończąca się
.
,^
i$
operatory dopasowania.