W MySQL, REGEXP_INSTR() funkcja zwraca początkowy indeks podłańcucha, który pasuje do wzorca wyrażenia regularnego.
Indeks zaczyna się od 1 . Jeśli nie ma dopasowania, wynikiem jest 0 .
Składnia
Składnia wygląda tak:
REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, 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).
Opcjonalna return_option argument pozwala określić, jaki typ pozycji ma zostać zwrócony. Jeśli używasz 0 , zwróci pozycję pierwszego znaku w pasującym podciągu. Jeśli używasz 1 zwraca pozycję pierwszego znaku po pasujący podciąg. Jeśli zostanie pominięty, wartość to 0 .
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_INSTR('Cat', 'at') Result; Wynik:
+--------+ | Result | +--------+ | 2 | +--------+
W tym przypadku występuje dopasowanie, a podciąg zaczyna się na pozycji 2.
Przykład 2 – Brak dopasowania
Oto przykład, w którym nie ma dopasowania:
SELECT REGEXP_INSTR('Cat', '^at') Result; Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
Brak dopasowania, więc wynik to 0 . Nie ma dopasowania, ponieważ określiłem, że ciąg musi zaczynać się od podciągu.
Zmieńmy to tak, aby działa zacznij od tego podciągu:
SELECT REGEXP_INSTR('at', '^at') Result; Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
Przykład 3 – pos Argument
Oto przykład określenia pozycji początkowej:
SELECT REGEXP_INSTR('Cat Cat', 'Cat', 2) Result; Wynik:
+--------+ | Result | +--------+ | 5 | +--------+
Otrzymujemy więc indeks drugiego wystąpienia.
Zauważ, że indeks nadal zaczyna liczyć od pozycji 1, niezależnie od tego, gdzie określisz pozycję początkową.
Poniższy przykład pokazuje to wyraźniej:
SELECT
REGEXP_INSTR('Cat Cat', 'Cat', 2) AS 'Pos 2',
REGEXP_INSTR('Cat Cat', 'Cat', 3) AS 'Pos 3',
REGEXP_INSTR('Cat Cat', 'Cat', 5) AS 'Pos 5'; Wynik:
+-------+-------+-------+ | Pos 2 | Pos 3 | Pos 5 | +-------+-------+-------+ | 5 | 5 | 5 | +-------+-------+-------+
Oczywiście, w zależności od wzorca wyrażenia regularnego, może to zwrócić indeks zupełnie różnych podciągów. Przykład:
SELECT
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1) 'Pos 1',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2) 'Pos 2',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 6) 'Pos 6'; Wynik:
+-------+-------+-------+ | Pos 1 | Pos 2 | Pos 6 | +-------+-------+-------+ | 1 | 5 | 16 | +-------+-------+-------+
Możemy sprawdzić podciągi za pomocą REGEXP_SUBSTR() funkcja:
SELECT
REGEXP_SUBSTR('Cat City is SO Cute!', 'C.t', 1) 'Pos 1',
REGEXP_SUBSTR('Cat City is SO Cute!', 'C.t', 2) 'Pos 2',
REGEXP_SUBSTR('Cat City is SO Cute!', 'C.t', 6) 'Pos 6'; Wynik:
+-------+-------+-------+ | Pos 1 | Pos 2 | Pos 6 | +-------+-------+-------+ | Cat | Cit | Cut | +-------+-------+-------+
Przykład 4 – occurrence Argument
Oto przykład użycia occurrence argument. We wszystkich przypadkach zaczynamy od pozycji 1:
SELECT
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1) 'Occurrence 1',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 2) 'Occurrence 2',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 3) 'Occurrence 3'; Wynik:
+--------------+--------------+--------------+ | Occurrence 1 | Occurrence 2 | Occurrence 3 | +--------------+--------------+--------------+ | 1 | 5 | 16 | +--------------+--------------+--------------+
Jeśli jednak zaczniemy od innej pozycji, wynik będzie inny:
SELECT
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2, 1) 'Occurrence 1',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2, 2) 'Occurrence 2',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2, 3) 'Occurrence 3'; Wynik:
+--------------+--------------+--------------+ | Occurrence 1 | Occurrence 2 | Occurrence 3 | +--------------+--------------+--------------+ | 5 | 16 | 0 | +--------------+--------------+--------------+
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ł ujemny (tj. nie było wystąpienia 3).
Przykład 5 – return_option Argument
Oto przykład użycia return_option argument:
SELECT
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 0) 'Option 0',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 1) 'Option 1';
Wynik:
+----------+----------+ | Option 0 | Option 1 | +----------+----------+ | 1 | 4 | +----------+----------+
Opcja 0 zwróciła pierwszy znak dopasowanego podciągu. Opcja 1 zwróciła pozycję po dopasowanym podciągu.
Oto, jak to wygląda, jeśli zastosujemy to do poprzedniego przykładu:
SELECT
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 0) 'Occurrence 1',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 2, 0) 'Occurrence 2',
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 3, 0) 'Occurrence 3'
UNION ALL
SELECT
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 1),
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 2, 1),
REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 3, 1);
Wynik:
+--------------+--------------+--------------+ | Occurrence 1 | Occurrence 2 | Occurrence 3 | +--------------+--------------+--------------+ | 1 | 5 | 16 | | 4 | 8 | 19 | +--------------+--------------+--------------+
W tym przypadku zrobiliśmy jeden zestaw za pomocą opcji 0, a drugi za pomocą opcji 1, a następnie połączyliśmy je razem za pomocą UNION ALL .
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_INSTR('Cat City is SO Cute!', 'c.t', 1, 1, 0, 'c') 'Case-Sensitive',
REGEXP_INSTR('Cat City is SO Cute!', 'c.t', 1, 1, 0, 'i') 'Case-Insensitive'; Wynik:
+----------------+------------------+ | Case-Sensitive | Case-Insensitive | +----------------+------------------+ | 0 | 1 | +----------------+------------------+
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.