15:40
MySQL - Wyrażenia regularne
Wyrażenia regularne dają większe możliwości w zakresie wyszukiwania rekordów w bazie danych. Oferują one bardzo dużą elastyczność podczas wyszukiwania wzorca i służą do precyzyjnego charakteryzowania sekwencji znaków. Występują w większości języków programowania, a także w bazach danych. Baza MySQL również posiada tą funkcjonalność. Ciąg znaków można scharakteryzować z pomocą pewnych metaznaków.
Metaznaki wyrażeń regularnych dla MySQL
Mimo, że wiele języków umożliwia używanie wyrażeń regularnych to te znaki mogą być różne dla danych języków programowania. Poniżej znajduje się lista znaków dla MySQL.
-
.- dowolny znak -
^- początek ciągu -
$- koniec ciągu -
[...]- dowolny znak ze zbioru (...) -
[^...]- dowolny znak spoza zbioru (...) -
[:k:]- dowolny znak z danej klasy k -
a*- liczba wystąpień znaku a wynosi zero lub więcej -
a+- co najmniej jedno wystąpienie znaki a -
a?- co najwyżej jedno wystąpienie znaku a -
a{5}– pięciokrotne wystąpienie znaku a -
a{1,5}– wystąpienie znaku a od jednego do pięciu razy -
a{5,}- wystąpienie znaku a co najmniej 5 razy -
a|b– wystąpienie znaku a lub b -
(...)- definicja wyrażenia składowego
Aby poinformować MySQL o używaniu w zapytaniu wyrażeń regularnych używa się polecenia REGEXP. MySQL nie rozróżnia wielkości znaków w wewnątrz zapytania, więc decyzja czy używać małe, czy wielkie litery podczas tworzenia zapytania należy do użytkownika. Bywają też sytuacje, kiedy znak do wyszukania stanowi część wyrażenia regularnego (np. wyszukanie znaku [). W takim wypadku przed użyciem danego symbolu należy dodać (np. [).
Przykłady użycia wyrażeń regularnych
Stosowanie wyrażeń regularnych nie jest trudne, jak to się często początkującym użytkownikom wydaje. Poniżej prezentuję kilka zagadnień związanych z zapytaniami MySQL z wyrażeniami regularnymi.
Wyszukanie rekordów kończących się ciągiem "a";
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP 'a$';
Wyszukiwanie rekordów zaczynających się od cyfry
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP '^[:0-9:]';
Wyszukanie rekordów zawierających ciąg "jak"
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP 'jak';
Wyszukiwanie rekordów, w których pierwszy wyraz zaczyna się na s
SELECT id,txt2 FROM test.test WHERE txt2 REGEXP '^([[:<:]]s)';
Wyszukiwanie rekordów, dłuższych niż jeden wyraz
SELECT id,txt2 FROM test.test WHERE txt2 REGEXP '^.+ ';
Wyszukiwanie rekordów z adresami stron internetowych
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP '(http://)+[a-z0-9]+(.[a-z0-9])*(.[a-z])';
Wyszukiwanie rekordów zawierających adres email
SELECT id,txt1 FROM test.test WHERE txt1 REGEXP '([a-z0-9]+@{1}[a-z0-9]+(.[a-z][0-9])*(.[a-z]))';
Wpisy na blogu 
Komentarze
12:31
17:16
04:18
22:18
22:10