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

Przykłady REGEXP MySQL

W MySQL REGEXP Operator służy do określenia, czy ciąg pasuje do wyrażenia regularnego. To synonim wyrażenia REGEXP_LIKE() .

Jeśli ciąg pasuje do podanego wyrażenia regularnego, wynikiem jest 1 , w przeciwnym razie jest to 0 .

Składnia

Składnia wygląda tak:

expr REGEXP pat

Gdzie expr jest ciągiem wejściowym i pat jest wyrażeniem regularnym, względem którego testujesz ciąg.

Przykład 1 – Podstawowe wyrażenie regularne

Najbardziej podstawowe wyrażenie regularne, którego możemy użyć, to takie, które nie zawiera znaków specjalnych. Tutaj po prostu używamy ciągu. Jeśli jakakolwiek część ciągu wejściowego pasuje do tego ciągu, zwraca dopasowanie.

SELECT 
  'Corn' REGEXP 'Corn' AS 'Corn',
  'Acorn' REGEXP 'Corn' AS 'Acorn',
  'Corner' REGEXP 'Corn' AS 'Corner',
  'Cheese' REGEXP 'Corn' AS 'Cheese';

Wynik:

+------+-------+--------+--------+
| Corn | Acorn | Corner | Cheese |
+------+-------+--------+--------+
|    1 |     1 |      1 |      0 |
+------+-------+--------+--------+

Przykład 2 – Dopasuj początek ciągu

W tym przykładzie wyrażenie regularne określa, że ​​ciąg musi zaczynać się od Co .

SELECT 
  'Corn' REGEXP '^Co' AS 'Corn',
  'Acorn' REGEXP '^Co' AS 'Acorn',
  'Cheese' REGEXP '^Co' AS 'Cheese';

Wynik:

+------+-------+--------+
| Corn | Acorn | Cheese |
+------+-------+--------+
|    1 |     0 |      0 |
+------+-------+--------+

Przykład 3 – Dopasuj koniec ciągu

W tym przykładzie wyrażenie regularne określa, że ​​ciąg musi kończyć się rn .

SELECT 
  'Corn' REGEXP 'rn$' AS 'Corn',
  'Acorn' REGEXP 'rn$' AS 'Acorn',
  'Cheese' REGEXP 'rn$' AS 'Cheese';

Wynik:

+------+-------+--------+
| Corn | Acorn | Cheese |
+------+-------+--------+
|    1 |     1 |      0 |
+------+-------+--------+

Przykład 4 – Dopasuj dowolny znak

. znak pasuje do dowolnego znaku.

SELECT 
  'Corn' REGEXP '.' AS 'Corn',
  'Cheese' REGEXP '.' AS 'Cheese',
  '' REGEXP '.' AS '';

Wynik:

+------+--------+---+
| Corn | Cheese |   |
+------+--------+---+
|    1 |      1 | 0 |
+------+--------+---+

Ten znak jest zwykle używany w połączeniu z innymi znakami w celu określenia dalszych kryteriów. Na przykład:

SELECT 
  'Corn' REGEXP '^C.rn$' AS 'Corn', 
  'Crn' REGEXP '^C.rn$' AS 'Crn';

Wynik:

+------+-----+
| Corn | Crn |
+------+-----+
|    1 |   0 |
+------+-----+

Tutaj określamy, że ciąg musi zaczynać się od C , że musi następować po nim znak (dowolny znak) i że musi kończyć się rn .

Zauważ, że ten znak określa pojedynczą instancję znaku. Jeśli chcesz określić wiele instancji (na przykład ee zamiast po prostu e ), musisz dodać więcej . znaków.

SELECT 
  'Tweet' REGEXP '^Tw..t$' AS 'Tweet', 
  'Tweat' REGEXP '^Tw..t$' AS 'Tweat', 
  'Tweet' REGEXP '^Tw.t$' AS 'Tweet', 
  'Twit' REGEXP '^Tw..t$' AS 'Twit';

Wynik:

+-------+-------+-------+------+
| Tweet | Tweat | Tweet | Twit |
+-------+-------+-------+------+
|     1 |     1 |     0 |    0 |
+-------+-------+-------+------+

Innym sposobem na to jest określenie liczby wystąpień w nawiasach klamrowych:

SELECT 
  'Tweet' REGEXP '^Tw.{2}t$' AS 'Tweet', 
  'Tweat' REGEXP '^Tw.{2}t$' AS 'Tweat', 
  'Tweet' REGEXP '^Tw.{1}t$' AS 'Tweet', 
  'Twit' REGEXP '^Tw.{2}t$' AS 'Twit';

Wynik:

+-------+-------+-------+------+
| Tweet | Tweat | Tweet | Twit |
+-------+-------+-------+------+
|     1 |     1 |     0 |    0 |
+-------+-------+-------+------+

Jeśli jednak znasz znak, którego szukasz, możesz określić ten znak (zamiast . znak), jak pokazano w poniższym przykładzie.

Przykład 5 – Dopasuj zero lub więcej wystąpień określonego znaku

Możemy wykonać następujące czynności, aby określić zero lub więcej wystąpień e charakter:

SELECT 
  'Twet' REGEXP '^Twe*t$' AS 'Twet',
  'Tweet' REGEXP '^Twe*t$' AS 'Tweet',
  'Tweeet' REGEXP '^Twe*t$' AS 'Tweeet',
  'Twt' REGEXP '^Twe*t$' AS 'Twt',
  'Twit' REGEXP '^Twe*t$' AS 'Twit',
  'Twiet' REGEXP '^Twe*t$' AS 'Twiet',
  'Tweit' REGEXP '^Twe*t$' AS 'Tweit';

Wynik:

+------+-------+--------+-----+------+-------+-------+
| Twet | Tweet | Tweeet | Twt | Twit | Twiet | Tweit |
+------+-------+--------+-----+------+-------+-------+
|    1 |     1 |      1 |   1 |    0 |     0 |     0 |
+------+-------+--------+-----+------+-------+-------+

Pierwsze cztery pasują, ale ostatnie trzy nie.

Przykład 6 – Dopasuj jedno lub więcej wystąpień określonej postaci

Możemy zmodyfikować poprzedni przykład tak, że otrzymamy dopasowanie tylko wtedy, gdy jeden znaleziono lub więcej znaków (poprzedni przykład zwrócił dopasowanie, jeśli zero lub więcej). Aby to zrobić, po prostu używamy + zamiast * :

SELECT 
  'Twet' REGEXP '^Twe+t$' AS 'Twet',
  'Tweet' REGEXP '^Twe+t$' AS 'Tweet',
  'Tweeet' REGEXP '^Twe+t$' AS 'Tweeet',
  'Twt' REGEXP '^Twe+t$' AS 'Twt',
  'Twit' REGEXP '^Twe+t$' AS 'Twit',
  'Twiet' REGEXP '^Twe+t$' AS 'Twiet',
  'Tweit' REGEXP '^Twe+t$' AS 'Tweit';

Wynik:

+------+-------+--------+-----+------+-------+-------+
| Twet | Tweet | Tweeet | Twt | Twit | Twiet | Tweit |
+------+-------+--------+-----+------+-------+-------+
|    1 |     1 |      1 |   0 |    0 |     0 |     0 |
+------+-------+--------+-----+------+-------+-------+

W takim przypadku czwarte słowo zwraca inny wynik niż w poprzednim przykładzie.

Przykład 7 – Dopasuj zero lub jedno wystąpienie określonej postaci

Możemy zmodyfikować poprzedni przykład tak, że otrzymamy dopasowanie tylko dla zera lub jednego z żądanych znaków. Aby to zrobić, używamy ? :

SELECT 
  'Twet' REGEXP '^Twe?t$' AS 'Twet',
  'Tweet' REGEXP '^Twe?t$' AS 'Tweet',
  'Tweeet' REGEXP '^Twe?t$' AS 'Tweeet',
  'Twt' REGEXP '^Twe?t$' AS 'Twt',
  'Twit' REGEXP '^Twe?t$' AS 'Twit',
  'Twiet' REGEXP '^Twe?t$' AS 'Twiet',
  'Tweit' REGEXP '^Twe?t$' AS 'Tweit';

Wynik:

+------+-------+--------+-----+------+-------+-------+
| Twet | Tweet | Tweeet | Twt | Twit | Twiet | Tweit |
+------+-------+--------+-----+------+-------+-------+
|    1 |     0 |      0 |   1 |    0 |     0 |     0 |
+------+-------+--------+-----+------+-------+-------+

Przykład 8 – Naprzemienne

Możesz użyć | znak pasujący do jednego lub drugiego ciągu znaków:

SELECT 
  'Tweet' REGEXP 'Tw|et' AS 'Tweet',
  'For Let' REGEXP 'Tw|et' AS 'For Let',
  'Banana' REGEXP 'Tw|et' AS 'Banana';

Wynik:

+-------+---------+--------+
| Tweet | For Let | Banana |
+-------+---------+--------+
|     1 |       1 |      0 |
+-------+---------+--------+

Oto kolejny przykład, w którym wyszukuję całe słowa:

SELECT 
  'Cat' REGEXP 'Cat|Dog' AS 'Cat',
  'Dog' REGEXP 'Cat|Dog' AS 'Dog',
  'Doggone' REGEXP 'Cat|Dog' AS 'Doggone',
  'Banana' REGEXP 'Cat|Dog' AS 'Banana';

Wynik:

+-----+-----+---------+--------+
| Cat | Dog | Doggone | Banana |
+-----+-----+---------+--------+
|   1 |   1 |       1 |      0 |
+-----+-----+---------+--------+

Nadal otrzymujemy dopasowanie, nawet jeśli nasze wyrażenie regularne pasuje tylko do części ciągu.

Przykład 9 – Dopasuj zero lub więcej wystąpień sekwencji

Możesz używać nawiasów wraz z gwiazdką ()* aby określić zero lub więcej wystąpień sekwencji:

SELECT 
  'Banana' REGEXP '(an)*' AS 'Banana',
  'Land' REGEXP '(an)*' AS 'Land',
  'Cheese' REGEXP '(an)*' AS 'Cheese';

Wynik:

+--------+------+--------+
| Banana | Land | Cheese |
+--------+------+--------+
|      1 |    1 |      1 |
+--------+------+--------+

Inny przykład:

SELECT 
  'Banana' REGEXP '^B(an)*d$' AS 'Banana',
  'Band' REGEXP '^B(an)*d$' AS 'Band',
  'Bald' REGEXP '^B(an)*d$' AS 'Bald',
  'Bad' REGEXP '^B(an)*d$' AS 'Bad';

Wynik:

+--------+------+------+-----+
| Banana | Band | Bald | Bad |
+--------+------+------+-----+
|      0 |    1 |    0 |   0 |
+--------+------+------+-----+

Przykład 10 – Powtórzenie

Jak widać w poprzednim przykładzie, możesz użyć nawiasów klamrowych, aby określić powtórzenie. Ta notacja zapewnia bardziej ogólny sposób pisania wyrażeń regularnych niż niektóre z poprzednich przykładów:

SELECT 
  'Tweeet' REGEXP 'e{3}' AS 'Tweeet',
  'Tweet' REGEXP 'e{3}' AS 'Tweet';

Wynik:

+--------+-------+
| Tweeet | Tweet |
+--------+-------+
|      1 |     0 |
+--------+-------+

Przykład 11 – Zasięg

Do określenia zakresu można użyć łącznika. Oto przykład określający zakres liczb:

SELECT 
  'Tweet 123' REGEXP '[0-9]' AS 'Tweet 123',
  'Tweet ABC' REGEXP '[0-9]' AS 'Tweet ABC';

Wynik:

+--------+-------+
| Tweeet | Tweet |
+--------+-------+
|      1 |     0 |
+--------+-------+

Poniższy przykład określa zakres liter:

SELECT 
  'Tweet 123' REGEXP '[A-Z]' AS 'Tweet 123',
  'ABC' REGEXP '[A-Z]' AS 'ABC',
  '123' REGEXP '[A-Z]' AS '123';

Wynik:

+--------+-------+
| Tweeet | Tweet |
+--------+-------+
|      1 |     0 |
+--------+-------+

Oto, co się stanie, jeśli ograniczymy zakres liczb:

SELECT 
  '123' REGEXP '[1-3]' AS '123',
  '012' REGEXP '[1-3]' AS '012',
  '045' REGEXP '[1-3]' AS '045';

Wynik:

+-----+-----+-----+
| 123 | 012 | 045 |
+-----+-----+-----+
|   1 |   1 |   0 |
+-----+-----+-----+

Przykład 12 – Poza zakresem

Możemy użyć ^ znak, aby zmodyfikować poprzedni przykład, aby wykluczyć określony zakres znaków:

SELECT 
  '123' REGEXP '[^1-3]' AS '123',
  '012' REGEXP '[^1-3]' AS '012',
  '045' REGEXP '[^1-3]' AS '045';

Wynik:

+-----+-----+-----+
| 123 | 012 | 045 |
+-----+-----+-----+
|   0 |   1 |   1 |
+-----+-----+-----+

Otrzymujemy więc wynik odwrotny do poprzedniego przykładu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić wartość początkową i automatyczny przyrost w MySQL?

  2. Jak wyświetlić obraz z bazy danych za pomocą php

  3. Usuń lub przytnij pierwsze lub ostatnie kilka znaków w bazie danych MySQL za pomocą SQL

  4. Jak znaleźć wszystkie tabele, które mają klucze obce, które odwołują się do konkretnej table.column i mają wartości dla tych kluczy obcych?

  5. Wyzwalacz MySQL przy zdarzeniach Insert/Update