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'