decoration Wpisy na blogu decoration

decoration
decoration
21.12 2006
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]))';




Komentarze:

10.07 2008
12:31

Razi Thx, przydalo sie:D Nigdzie nie moglem znalezc

09.04 2009
17:16

Beny Przydatne.
Można by temat rozwinąć.

21.07 2009
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

Dodaj komentarz:

Nick:
URL:
Komentarz:
Wynik dzialania z obrazka =

Powrót



Copyleft (C) tom000.info 2004-2010. Some rights reserved.