Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak działa funkcja REGEXP_INSTR() w MySQL

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć histogram w MySQL?

  2. Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:TAK) (Mysql::Błąd)

  3. Błąd krytyczny:Nieprzechwycony błąd:Wywołanie niezdefiniowanej funkcji mysql_connect()

  4. Grupa MySQL firmy SUM

  5. Zamień pierwszą literę na wielką. MySQL