Wyrażenia regularne MYSQL (REGEXP) ze składnią & Przykłady

Anonim

Co to są wyrażenia regularne?

Wyrażenia regularne ułatwiają wyszukiwanie danych spełniających złożone kryteria. W poprzednim samouczku przyjrzeliśmy się symbolom wieloznacznym. Jeśli wcześniej pracowałeś ze znakami wieloznacznymi, możesz zapytać, po co uczyć się wyrażeń regularnych, skoro możesz uzyskać podobne wyniki, używając symboli wieloznacznych. Ponieważ w porównaniu do symboli wieloznacznych wyrażenia regularne pozwalają nam przeszukiwać dane pasujące do jeszcze bardziej złożonego kryterium.

Podstawowa składnia

Podstawowa składnia wyrażenia regularnego jest następująca

SELECT statements… WHERE fieldname REGEXP 'pattern';

TUTAJ -

  • „Instrukcje SELECT…” to standardowa instrukcja SELECT
  • „WHERE nazwa pola” to nazwa kolumny, na której ma być wykonywane wyrażenie regularne.
  • „Wzorzec REGEXP” „ REGEXP jest operatorem wyrażenia regularnego, a„ wzorzec ”reprezentuje wzorzec, który ma zostać dopasowany przez REGEXP. RLIKE jest synonimem REGEXP i daje takie same wyniki jak REGEXP. Aby uniknąć pomylenia go z operatorem LIKE, lepiej zamiast tego użyć REGEXP .

Spójrzmy teraz na praktyczny przykład:

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

Powyższe zapytanie wyszukuje wszystkie tytuły filmów, które zawierają kod słowny. Nie ma znaczenia, czy „kod” znajduje się na początku, w środku czy na końcu tytułu. Tak długo, jak jest zawarte w tytule, będzie brane pod uwagę.

Załóżmy, że chcemy wyszukać filmy zaczynające się od a, b, c lub d, po których następuje dowolna liczba innych znaków, jak moglibyśmy to osiągnąć. Możemy użyć wyrażenia regularnego razem z metaznakami, aby osiągnąć pożądane rezultaty.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Wykonanie powyższego skryptu w środowisku roboczym MySQL na myflixdb daje następujące wyniki.

 
movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

Przyjrzyjmy się teraz uważnie naszemu wyrażeniu regularnemu odpowiedzialnemu za powyższy wynik.

„[abcd]” daszek (^) oznacza, że ​​dopasowanie wzorca powinno być zastosowane na początku, a lista znaków [abcd] oznacza, że ​​w naszym zestawie wyników zwracane są tylko tytuły filmów zaczynające się od a, b, c lub d.

Zmodyfikujmy nasz powyższy skrypt i użyjmy listy znaków NOT i zobaczmy, jakie wyniki uzyskamy po wykonaniu naszego zapytania.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Wykonanie powyższego skryptu w środowisku roboczym MySQL na myflixdb daje następujące wyniki.

 
movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

Przyjrzyjmy się teraz uważnie naszemu wyrażeniu regularnemu odpowiedzialnemu za powyższe wyniki.

„[abcd]” daszek (^) oznacza, że ​​dopasowanie wzorca powinno być zastosowane na początku, a lista znaków [abcd] oznacza, że ​​tytuły filmów zaczynające się od któregokolwiek z zamkniętych znaków są wykluczone ze zbioru wyników.

Metaznaki wyrażeń regularnych

W powyższym przykładzie przyjrzeliśmy się najprostszej postaci wyrażenia regularnego. Przyjrzyjmy się teraz bardziej zaawansowanym dopasowaniom wzorców wyrażeń regularnych. Załóżmy, że chcemy wyszukać tytuły filmów, które zaczynają się od wzorca „kod” tylko przy użyciu wyrażenia regularnego, jak byśmy się do tego zabierali? Odpowiedzią są metaznaki. Pozwalają nam dopracować wyniki wyszukiwania wzorców za pomocą wyrażeń regularnych.

Zwęglać Opis Przykład
* Gwiazdka (*) Metaznak służy do dopasowywania na zero (0) lub więcej przykładów strun poprzedzających go WYBIERZ * Z filmów GDZIE tytuł REGEXP 'da *'; da wszystkie filmy zawierające postacie „da”. Na przykład Kod Leonarda da Vinci, Dziewczynki tatusia.
+ Plus (+) Metaznak służy do dopasowywania jeden lub więcej przykładów ciągów poprzedzających go. SELECT * FROM `movies` WHERE` title` REGEXP 'mon +'; poda wszystkie filmy zawierające postacie „mon” .Na przykład Anioły i Demony.
? Metaznak pytania (?) Służy do dopasowania zera (0) lub jednego wystąpienia ciągów poprzedzających go. SELECT * FROM `Categories` WHERE` category_name` REGEXP 'com?'; poda wszystkie kategorie zawierające string com. Na przykład komedia, komedia romantyczna.
. Kropka (.) Metaznak służy do dopasowywania dowolny pojedynczy znak w wyjątkiem nowej linii. SELECT * FROM movies WHERE `year_released` REGEXP '200.'; poda wszystkie filmy wydane w latach zaczynające się od znaków „200”, po których następuje dowolny pojedynczy znak. Na przykład 2005,2007,2008 itd.
[ABC] Lista znaków [abc] jest używana do dopasowania dowolnego z zawartych w niej znaków. SELECT * FROM `movies` WHERE` title` REGEXP '[vwxyz]'; poda wszystkie filmy zawierające dowolną pojedynczą postać z „vwxyz”. Na przykład X-Men, Kod Da Vinci itp.
[abc] Lista znaków [abc] jest używana do dopasowywania dowolnych znaków oprócz załączonych. SELECT * FROM `movies` WHERE` title` REGEXP '[vwxyz]'; zwróci wszystkie filmy zawierające postacie inne niż te z "vwxyz".
[AZ] [AZ] służy do dopasowywania dowolny wielką literę. SELECT * FROM `Members` WHERE` postal_address` REGEXP '[AZ]'; poda wszystkim członkom, którzy mają adres pocztowy zawierający dowolne znaki od A do Z… Na przykład Janet Jones z numerem członkostwa 1.
[az] [AZ] służy do dopasowywania dowolny małą literę SELECT * FROM `Members` WHERE` postal_address` REGEXP '[az]'; poda wszystkim członkom, którzy mają adresy pocztowe zawierające dowolne znaki od a do z… Na przykład Janet Jones z numerem członkostwa 1.
[0–9] [0-9] służy do dopasowywania dowolną wartość od 0 do 9. SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]' da wszystkim członkom, którzy przesłali numery kontaktowe zawierające znaki "[0-9]". Na przykład Robert Phil.
^ Daszka (^) jest używany do rozpoczęcia meczu na początek. SELECT * FROM `movies` WHERE` title` REGEXP '[cd]'; podaje wszystkie filmy, których tytuł zaczyna się od dowolnego znaku z płyty CD. Na przykład: Code Name Black, Daddy's Little Girls i Da Vinci Code.
| Bar pionowej (|) jest używany do izolowania alternatyw. SELECT * FROM `movies` WHERE` title` REGEXP '[cd] | [u]'; podaje wszystkie filmy, których tytuł zaczyna się od dowolnej postaci z „cd” lub „u”. Na przykład: Code Name Black, Daddy's Little Girl, Da Vinci Code i Underworld - Awakening.
[[: <:]] [[: <:]] Dopasowuje początek słów. SELECT * FROM `movies` WHERE` title` REGEXP '[[: <:]] for'; podaje wszystkie filmy z tytułami zaczynającymi się od postaci. Na przykład: Zapominanie o Sarah Marshal.
[[:>:]] [[:>:]] Dopasowuje koniec słowa. SELECT * FROM `movies` WHERE` title` REGEXP 'ACK [[:>:]]'; wyświetla wszystkie filmy z tytułami kończącymi się znakami „ACK” .Na przykład Code Name Black.
[:klasa:] [: Klasa:] dopasowuje klasę postaci tj [: alpha:] pasujących do liter, [: space:], aby dopasować białą przestrzeń, [: punct:] to znaki interpunkcyjne Mecz i [: górny:] górnych liter klasowych. SELECT * FROM `movies` WHERE` title` REGEXP '[: alpha:]'; daje wszystkie filmy z tytułami zawierają tylko litery. Na przykład Zapomnienie o Sarah Marshal, X-Men itp. Film taki jak Piraci z Karaibów 4 zostanie pominięty w tym zapytaniu.

Ukośnik odwrotny (\) służy jako znak zmiany znaczenia. Jeśli chcemy go użyć jako części wzorca w wyrażeniu regularnym, powinniśmy użyć podwójnych ukośników odwrotnych (\\)

Podsumowanie

  • Wyrażenia regularne zapewniają potężne i elastyczne dopasowanie do wzorca, które może pomóc nam we wdrożeniu narzędzi wyszukiwania zaawansowanego w naszych systemach baz danych.
  • REGEXP jest operatorem używanym podczas dopasowywania wzorców wyrażeń regularnych. RLIKE to synonim
  • Wyrażenia regularne obsługują wiele metaznaków, które zapewniają większą elastyczność i kontrolę podczas dopasowywania wzorców.
  • Ukośnik odwrotny jest używany jako znak zmiany znaczenia w wyrażeniach regularnych. Jest brany pod uwagę w dopasowaniu do wzorca tylko wtedy, gdy zastosowano podwójne odwrotne ukośniki.
  • W wyrażeniach regularnych nie jest rozróżniana wielkość liter.