tom000 - Personal Website - Strona główna
decor1 Wpisy na blogu decor2
21.122006
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]))';

 

Trackback: http://tom000.info/blog/trackback/mysql__wyrazenia_regularne.html

Komentarze

10.072008
12:31
Thx, przydalo sie:D Nigdzie nie moglem znalezc
09.042009
17:16
~Beny
Przydatne. Można by temat rozwinąć.
21.072009
04:18
~adam
Witam, a co jesli szukam rekordów w których w jednym z pół typu TEXT występuje dany wyraz zakonczony spacją? probuje ale jakos nie idzie. pozdawiam
24.082010
22:18
~tim
@adam rozwiń, bo nie rozumiem: "wyraz zakończony spacją"?? przecież spacja rozdziela wyrazy, więc nie może być częścią wyrazu. Jeśli ci chodzi o to że jest więcej niż 1 wyraz to jest przykład
07.012011
22:10
~kamil
a jak wyszukac tekst bez polskich znakow? wpisuje "tekst z polskimi znakami śą" a baze zamiania tak jak by nie bylo tam polskich znakow

Dodaj komentarz

Opcje

= (wpisz wynik działania z obrazka)
Copyleft (C) tom000.info 2004-2012. Some rights reserved.