wtorek,
MySQL i wyrażenia regularne
Wyrażenia regularne (regular expressions, regex, regexp) są szeroko stosowane w informatyce. Są to wzorce, które opisują łańcuchy symboli. Zagadnienie to jest dość złożone. Serwer MySQL ma wbudowaną obsługę wyrażeń regularnych. Na potrzeby krótkiej powtórki do egzaminu z kwalifikacji E.14 zaprezentowano podstawowe przykłady.
W MySQL wyrażenia regularne obsługują następujące funkcje i operatory: REGEXP, REGEXP_INSTR(), REGEXP_LIKE(), REGEXP_REPLACE(), REGEXP_SUBSTR(), RLIKE. W przykładach ograniczono się do operatora REGEXP, w pozostałych konstrukcjach składnia wyrażeń regularnych jest identyczna. Operator REGEXP wyszukuje łańcuchy znaków pasujące do wyrażenia regularnego. Dopuszczalne jest stosowanie negacji – NOT REGEXP (niepasujące do wyrażenia).
Niektóre symbole
. | jeden dowolny znak |
* | zero lub więcej dopasowań |
+ | jedno lub wiecej dopasowań |
^ | początek łańcucha znaków |
$ | koniec łańcucha znaków |
| | alternatywa, np. a|b oznacza a lub b |
[:klasa:] | klasa znaków, np. [:alnum:] to znaki alfanumeryczne, więcej opcji to: alnum (znaki alfanumeryczne), alpha (litery alfabetu), blank (białe znaki), cntrl (znaki kontrolne), digit (cyfry), graph (znaki graficzne), lower (małe litery alfabetu), print (znaki graficzne lub spacje), punct (znaki interpunkcyjne), space (spacja, tabulacja, znak nowej linii oraz powrotu karetki), upper (duże litery alfabetu), xdigit (znaki heksadecymalne) |
[a-z] | zakres znaków, np. [0-9] to cyfry, [0-9a-a] cyfry i małe litery, [0-9ab] cyfry i litery a oraz b |
{N},{N,m} | liczba wystąpień, np. a{2} oznacza znak a występujący dwa razy, a{2,3} to znak a wystepujący od 2 do 3 razy |
Przykłady
Tabela wykorzystana w przykładach jest dostępna do pobrania.
Zapytanie wybiera wszystkie rekordy, w których pole fname kończy się na 'an'.
Zapytanie wybiera wszystkie rekordy, w których pole fname zawiera podwojoną literę 'e'.
Zapytanie wybiera wszystkie rekordy, w których pole fname zawiera 'ha', 'ye' lub 'be'.
Zapytanie wybiera wszystkie rekordy, w których pole fname zawiera literę 'x' lub 'q'.
Zapytanie wybiera wszystkie rekordy, w których pole fname zawiera literę 'h' lub 'l' i kończy się na 'an'.
Zapytanie wybiera wszystkie rekordy, w których pole fname zaczyna się na 'D', zawiera literę 'm' i kończy się na 'n'.