MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak REGEXP działa w MariaDB

W MariaDB REGEXP Operator jest używany do określenia, czy łańcuch pasuje do wyrażenia regularnego.

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, dla którego testujesz ciąg.

Przykłady

Poniżej znajdują się przykłady użycia REGEXP operator z różnymi wzorami.

Podstawowe wyrażenie regularne

Zacznijmy od najprostszego przykładu. Najprostsze 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 |
+------+-------+--------+--------+

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 |
+------+-------+--------+

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 |
+------+-------+--------+

Dopasuj dowolną postać

. 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.

Dopasuj zero lub więcej wystąpień określonej postaci

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.

Dopasuj jedną lub więcej instancji 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.

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 |
+------+-------+--------+-----+------+-------+-------+

Zmiana

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.

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 |
+--------+------+------+-----+

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 |
+--------+-------+

Zakres

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:

+-----------+-----+-----+
| Tweet 123 | ABC | 123 |
+-----------+-----+-----+
|         1 |   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 |
+-----+-----+-----+

Nie w zasięgu

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 |
+-----+-----+-----+

W tym przypadku otrzymujemy wynik odwrotny do poprzedniego przykładu.

Wartości puste

Jeśli wyrażenie lub wzorzec ma wartość null , wynik to null :

SELECT 
  null REGEXP 'Corn' AS "Corn",
  'Acorn' REGEXP null AS "Acorn",
  null REGEXP null AS "Corner";

Wynik:

+------+-------+--------+
| Corn | Acorn | Corner |
+------+-------+--------+
| NULL |  NULL |   NULL |
+------+-------+--------+

  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 TIMESTAMPADD() działa w MariaDB

  2. Jak FROM_UNIXTIME() działa w MariaDB

  3. 4 funkcje, które zwracają minuty z wartości czasu w MariaDB

  4. MariaDB JSON_DETAILED() Objaśnienie

  5. Jak działa funkcja COALESCE() w MariaDB