W MariaDB REGEXP_SUBSTR()
funkcja zwraca podciąg pasujący do podanego wzorca wyrażenia regularnego.
Jeśli nie ma dopasowania (tj. ciąg wejściowy nie zawiera podciągu), wynikiem jest pusty ciąg.
Składnia
Składnia wygląda tak:
REGEXP_SUBSTR(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_SUBSTR()
akceptuje mniej argumentów niż REGEXP_SUBSTR()
MySQL . Wersja MySQL pozwala na podanie argumentów dla pozycji początkowej wyszukiwania, którego wystąpienia należy szukać, a także umożliwia doprecyzowanie wyrażenia regularnego.
Przykład
Oto podstawowy przykład:
SELECT REGEXP_SUBSTR('Thailand and Laos', 'l.nd');
Wynik:
+--------------------------------------------+ | REGEXP_SUBSTR('Thailand and Laos', 'l.nd') | +--------------------------------------------+ | land | +--------------------------------------------+
W tym przypadku występuje dopasowanie i podciąg jest zwracany.
Wiele meczów
Domyślnie, jeśli w ciągu jest wiele dopasowań, zwracane jest pierwsze z nich:
SELECT REGEXP_SUBSTR('Lend for land', 'l.nd');
Wynik:
+----------------------------------------+ | REGEXP_SUBSTR('Lend for land', 'l.nd') | +----------------------------------------+ | Lend | +----------------------------------------+
Brak dopasowania
Oto przykład, w którym nie ma dopasowania:
SELECT REGEXP_SUBSTR('Lend for land', '^C');
Wynik:
+--------------------------------------+ | REGEXP_SUBSTR('Lend for land', '^C') | +--------------------------------------+ | | +--------------------------------------+
Brak dopasowania, więc wynikiem jest pusty ciąg.
Wrażliwość na wielkość liter
REGEXP_SUBSTR()
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_SUBSTR('My Cats', 'c.t') AS "My Default",
REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_ci, 'c.t') AS "Case Insensitive",
REGEXP_SUBSTR(_latin7'My Cats' COLLATE latin7_general_cs, 'c.t') AS "Case Sensitive";
Wynik:
+------------+------------------+----------------+ | My Default | Case Insensitive | Case Sensitive | +------------+------------------+----------------+ | Cat | Cat | | +------------+------------------+----------------+
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
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:
Przykład:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'c.t') AS "Binary";
Wynik:
+-----------+--------+ | Character | Binary | +-----------+--------+ | Cat | | +-----------+--------+
Oto, co się stanie, jeśli zmienimy przypadek:
SELECT
REGEXP_SUBSTR('My Cats', 'C.t') AS "Character",
REGEXP_SUBSTR(BINARY 'My Cats', 'C.t') AS "Binary";
Wynik:
+-----------+--------+ | Character | Binary | +-----------+--------+ | Cat | Cat | +-----------+--------+
Argumenty zerowe
Przekazywanie null
ponieważ dowolny argument daje wynik null
:
SELECT
REGEXP_SUBSTR(null, 'c.t') AS "1",
REGEXP_SUBSTR('Cat', null) AS "2",
REGEXP_SUBSTR(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_SUBSTR('Cat');
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_SUBSTR'