W MariaDB 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(subject, pattern)
Gdzie subject jest ciągiem wejściowym i pattern jest wzorcem wyrażenia regularnego dla podłańcucha.
Zwróć uwagę, że w chwili pisania tego tekstu wersja MariaDB funkcji REGEXP_INSTR() akceptuje mniej argumentów niż REGEXP_INSTR() MySQL . Wersja MySQL pozwala na dostarczenie argumentów dla pozycji początkowej wyszukiwania, jakiego wystąpienia szukać, jakiego typu pozycji zwrócić, a także w sposób doprecyzowania wyrażenia regularnego.
Przykład
Oto podstawowy przykład:
SELECT REGEXP_INSTR('Cat', 'at'); Wynik:
+---------------------------+
| REGEXP_INSTR('Cat', 'at') |
+---------------------------+
| 2 |
+---------------------------+ W tym przypadku występuje dopasowanie, a podciąg zaczyna się na pozycji 2.
Brak dopasowania
Oto przykład, w którym nie ma dopasowania:
SELECT REGEXP_INSTR('Cat', '^at'); Wynik:
+----------------------------+
| REGEXP_INSTR('Cat', '^at') |
+----------------------------+
| 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'); Wynik:
+---------------------------+
| REGEXP_INSTR('at', '^at') |
+---------------------------+
| 1 |
+---------------------------+
Wrażliwość na wielkość liter
REGEXP_INSTR() Funkcja jest zgodna z regułami rozróżniania wielkości liter efektywnego sortowania. Dopasowywanie jest wykonywane bez rozróżniania wielkości liter w przypadku sortowania bez rozróżniania wielkości liter oraz z rozróżnianiem wielkości liter w przypadku sortowania z rozróżnianiem wielkości liter i danych binarnych.
Oto przykład:
SELECT
REGEXP_INSTR('Cat', 'c') AS "My Default",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_ci, 'c') AS "Case Insensitive",
REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_cs, 'c') AS "Case Sensitive"; Wynik:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | 1 | 1 | 0 | +------------+------------------+----------------+
Moje domyślne sortowanie nie uwzględnia wielkości liter. Pozostałe dwa ciągi zostały zmuszone do sortowania bez rozróżniania wielkości liter i sortowania z rozróżnianiem wielkości liter.
Zapewnienie BINARY string uwzględnia również wielkość liter (patrz poniżej).
Ciągi binarne
Domyślnie pozycje są mierzone w znakach, a nie w bajtach. Możesz jednak rzutować zestaw znaków wielobajtowych na BINARY aby uzyskać przesunięcia w bajtach, jeśli zajdzie taka potrzeba.
Przykład:
SELECT
REGEXP_INSTR('© Cat', 'C') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary"; Wynik:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 4 | +-----------+--------+
Symbol praw autorskich używa dwóch bajtów, dlatego w tym przykładzie otrzymujemy wynik 4 podczas przesyłania go do BINARY , w porównaniu do 3 że otrzymamy inaczej.
Pamiętaj jednak, że przekazywanie BINARY string wpływa również na rozróżnianie wielkości liter. Z BINARY ciągi znaków, znak z dużej litery jest inny niż jego odpowiednik z małej litery:
SELECT
REGEXP_INSTR('© Cat', 'c') AS "Character",
REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary"; Wynik:
+-----------+--------+ | Character | Binary | +-----------+--------+ | 3 | 0 | +-----------+--------+
Tutaj szukałem małej litery c zamiast wielkich liter, a BINARY ciąg nie pasował.
Argumenty zerowe
Przekazywanie null ponieważ dowolny argument daje wynik null :
SELECT
REGEXP_INSTR(null, 'c') AS "1",
REGEXP_INSTR('Cat', null) AS "2",
REGEXP_INSTR(null, null) AS "3"; Wynik:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Niewłaściwa liczba argumentów
Przekazanie nieprawidłowej liczby argumentów lub brak argumentów skutkuje błędem:
SELECT REGEXP_INSTR('Cat'); Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'