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

Jak działa funkcja REGEX_REPLACE() w MySQL

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.

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

  2. Różnice między INDEX, PRIMARY, UNIQUE, FULLTEXT w MySQL?

  3. Błąd uruchamiania serwera MySQL „Serwer został zamknięty bez aktualizacji pliku PID”

  4. Czy istnieje odpowiednik Profilera dla MySQL?

  5. MySQL nie używa indeksów z klauzulą ​​WHERE IN?