W MySQL funkcja REGEXP_REPLACE()
funkcja zastępuje wystąpienia podciągu w ciągu, który pasuje do podanego wzorca wyrażenia regularnego.
Zwracany jest cały ciąg wraz z zamiennikami.
Jeśli nie ma dopasowania (tj. ciąg wejściowy nie zawiera podciągu), cały ciąg jest zwracany bez zmian.
Składnia
Składnia wygląda tak:
REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])
Gdzie expr
jest ciągiem wejściowym i pat
jest wzorcem wyrażenia regularnego dla podłańcucha. repl
argumentem jest łańcuch zastępczy.
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. Jeśli zostanie pominięty, wszystkie wystąpienia zostaną zastąpione.
Opcjonalny match_type
argument to łańcuch, który określa sposób wykonania dopasowania. Pozwala to doprecyzować wyrażenie regularne. 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:
SET @str = 'It was good'; SELECT @str 'Original String', REGEXP_REPLACE(@str, 'good', 'great!') 'Result';
Wynik:
+-----------------+---------------+ | Original String | Result | +-----------------+---------------+ | It was good | It was great! | +-----------------+---------------+
W tym przypadku istnieje dopasowanie, a ciąg znaków jest zwracany z modyfikacją.
Przykład 2 – Wiele meczów
Domyślnie, jeśli w ciągu jest wiele dopasowań, wszystkie są zastępowane:
SET @str = 'Cat Dog Cat Dog Cat'; SELECT @str 'Original String', REGEXP_REPLACE(@str, 'Cat', 'Tiger') 'Result';
Wynik:
+---------------------+---------------------------+ | Original String | Result | +---------------------+---------------------------+ | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger | +---------------------+---------------------------+
Masz jednak również możliwość określenia, które wystąpienie chcesz zastąpić (więcej o tym później).
Przykład 3 – Brak dopasowania
Oto przykład, w którym nie ma dopasowania:
SET @str = 'Cat Dog Cat Dog Cat'; SELECT @str 'Original String', REGEXP_REPLACE(@str, 'Cow', 'Tiger') 'Result';
Wynik:
+---------------------+---------------------+ | Original String | Result | +---------------------+---------------------+ | Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat | +---------------------+---------------------+
Brak dopasowania, więc ciąg jest zwracany bez zmian.
Przykład 4 – pos
Argument
Oto przykład określenia pozycji początkowej:
SET @str = 'Cat Dog Cat Dog Cat'; SELECT @str 'Original String', REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2) 'Result';
Wynik:
+---------------------+-------------------------+ | Original String | Result | +---------------------+-------------------------+ | Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Tiger | +---------------------+-------------------------+
Zaczęliśmy od pozycji 2, która pojawia się po rozpoczęciu pierwszego wystąpienia, więc operacja zastępowania dotyczy tylko tych wystąpień, które następują po pierwszym wystąpieniu.
Przykład 5 – occurrence
Argument
Jak wspomniano, domyślnie wszystkie wystąpienia są zastępowane. Możesz jednak również określić konkretne wystąpienie do zastąpienia za pomocą occurrence
argument. Oto przykład:
SET @str = 'Cat Dog Cat Dog Cat'; SELECT @str 'Original String', REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 2) 'Result';
Wynik:
+---------------------+-----------------------+ | Original String | Result | +---------------------+-----------------------+ | Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Cat | +---------------------+-----------------------+
W tym przypadku zaczynamy od pozycji 1. Jeśli jednak zaczynamy od innej pozycji, wynik jest inny:
SET @str = 'Cat Dog Cat Dog Cat'; SELECT @str 'Original String', REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2, 2) 'Result';
Wynik:
+---------------------+-----------------------+ | Original String | Result | +---------------------+-----------------------+ | Cat Dog Cat Dog Cat | Cat Dog Cat Dog Tiger | +---------------------+-----------------------+
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.
Domyślna wartość argumentu wystąpienia to 0
, co oznacza, że wszystkie wystąpienia są zastępowane. Innymi słowy, jeśli pominiesz ten argument, wszystkie wystąpienia zostaną zastąpione (jak widzieliśmy w poprzednich przykładach). Oto przykład jawnego określenia wszystkich wystąpień:
SET @str = 'Cat Dog Cat Dog Cat'; SELECT @str 'Original String', REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 0) 'Result';
Wynik:
+---------------------+---------------------------+ | Original String | Result | +---------------------+---------------------------+ | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger | +---------------------+---------------------------+
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:
SET @str = 'Cat Dog Cat Dog Cat'; SELECT @str 'Original String', REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'c') 'Case-Sensitive', REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'i') 'Case-Insensitive';
Wynik:
+---------------------+---------------------+---------------------------+ | Original String | Case-Sensitive | Case-Insensitive | +---------------------+---------------------+---------------------------+ | Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger | +---------------------+---------------------+---------------------------+
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.