Wyrażenia regularne MYSQL (REGEXP) ze składnią i przykładami
Co to są wyrażenia regularne?
Wyrażenia regularne pomagają wyszukiwać dane spełniające złożone kryteria. W poprzednim samouczku przyjrzeliśmy się symbolom wieloznacznym. Jeśli wcześniej pracowałeś z symbolami wieloznacznymi, możesz pytać, 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 wyszukiwać dane spełniające jeszcze bardziej złożone kryteria.
Podstawowa składnia
Podstawowa składnia wyrażenia regularnego jest następująca
SELECT statements... WHERE fieldname REGEXP 'pattern';
TUTAJ -
- „Wybierz instrukcje…” jest standardem SELECT oświadczenie
- „WHERE nazwa pola” to nazwa kolumny, na której ma zostać wykonane wyrażenie regularne.
- „Wzorzec” REGEXP” REGEXP jest operatorem wyrażeń regularnych, a „wzorzec” reprezentuje wzorzec, który ma zostać dopasowany przez REGEXP. RLIKE jest synonim REGEXP i osiąga takie same rezultaty jak REGEXP. Aby uniknąć pomylenia go z operatorem LIKE, lepiej użyć REGEXP zamiast.
Spójrzmy teraz na praktyczny przykład-
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Powyższe zapytanie wyszukuje wszystkie tytuły filmów zawierające kod słowny. Nie ma znaczenia, czy „kod” znajduje się na początku, w środku czy na końcu tytułu. O ile jest to zawarte w tytule, zostanie ono uwzględnione.
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 możemy to osiągnąć. Aby osiągnąć pożądane rezultaty, możemy użyć wyrażenia regularnego wraz z metaznakami.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Wykonanie powyższego skryptu w MySQL Workbench w stosunku do myflixdb daje nam 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 bliżej naszemu wyrażeniu regularnemu odpowiedzialnemu za powyższy wynik.
'^[abcd]' daszek (^) oznacza, że dopasowanie wzorca powinno zostać zastosowane na początku, a lista znaków [abcd] oznacza, że w naszym zestawie wyników zwracane są tylko tytuły filmów rozpoczynające się od a, b, c lub d.
Zmodyfikujmy powyższy skrypt i skorzystajmy z listy znaków NOT i zobaczmy, jakie wyniki otrzymamy po wykonaniu naszego zapytania.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Wykonanie powyższego skryptu w MySQL workbench z myflixdb daje nam 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 bliżej naszemu wyrażeniu regularnemu odpowiedzialnemu za powyższe wyniki.
'^[^abcd]' daszek (^) oznacza, że dopasowanie wzorca powinno zostać zastosowane na początku, a lista znaków [^abcd] oznacza, że tytuły filmów rozpoczynające się od któregokolwiek z załączonych znaków są wykluczone ze zbioru wyników.
Metaznaki wyrażeń regularnych
W powyższym przykładzie przyjrzeliśmy się najprostszej formie wyrażenia regularnego. Przyjrzyjmy się teraz bardziej zaawansowanym dopasowaniom wzorców wyrażeń regularnych. Załóżmy, że chcemy wyszukać tytuły filmów rozpoczynające się od wzorca „kod” tylko przy użyciu wyrażenia regularnego. Jak byśmy to zrobili? Odpowiedzią są metaznaki. Pozwalają nam dostosować wyniki wyszukiwania wzorców za pomocą wyrażeń regularnych.
Zwęglać | Opisy Konstrukcyjne | Przykład | |
---|---|---|---|
* | gwiazdka (*) metaznak służy do dopasowania zera (0) lub większej liczby wystąpień poprzedzających go ciągów znaków | WYBIERZ * Z filmów GDZIE tytuł REGEXP 'da*'; poda wszystkie filmy zawierające znaki „da”. Na przykład Kod Da Vinci, Dziewczynki tatusia. | |
+ | więcej (+) metaznak służy do dopasowania jednego lub większej liczby wystąpień poprzedzających go ciągów znaków. | WYBIERZ * Z `filmów` WHERE `tytuł` REGEXP 'mon+'; wyświetli wszystkie filmy zawierające postacie „mon”. Na przykład Anioły i Demony. | |
? | Pytanie(?) metaznak służy do dopasowania zera (0) lub jednego wystąpienia poprzedzających go ciągów znaków. | WYBIERZ * Z `kategorii` GDZIE `nazwa_kategorii` REGEXP 'com?'; wyświetli wszystkie kategorie zawierające ciąg com. Na przykład komedia, komedia romantyczna. | |
. | kropka (.) metaznak służy do dopasowania dowolnego pojedynczego znaku z wyjątkiem nowej linii. | WYBIERZ * Z filmów GDZIE `rok_wydania` REGEXP '200.'; wyświetli wszystkie filmy wydane w latach zaczynających się od znaków „200”, po których następuje dowolny pojedynczy znak. Na przykład 2005,2007,2008 itd. | |
[ABC] | lista charlistów [abc] służy do dopasowania dowolnego z załączonych znaków. | WYBIERZ * Z `filmów` GDZIE `tytuł` REGEXP '[vwxyz]'; wyświetli wszystkie filmy zawierające dowolną pojedynczą postać w „vwxyz”. Na przykład X-Men, Kod Da Vinci itp. | |
[^ abc] | lista znaków [^abc] służy do dopasowywania dowolnych znaków z wyjątkiem tych załączonych. | WYBIERZ * Z `filmów` GDZIE `tytuł` REGEXP '^[^vwxyz]'; wyświetli wszystkie filmy zawierające postacie inne niż te w „vwxyz”. | |
[AZ] | [AZ] służy do dopasowania dowolnej dużej litery. | SELECT * FROM `członkowie` WHERE `adres_pocztowy` REGEXP '[AZ]'; przekaże wszystkim członkom, których adres pocztowy zawiera dowolne znaki od A do Z. Na przykład Janet Jones z numerem członkowskim 1. | |
[az] | [az] służy do dopasowania dowolnej małej litery | WYBIERZ * Z `członków` WHERE `adres_pocztowy` REGEXP '[az]'; poda wszystkim członkom, którzy mają adresy pocztowe zawierające dowolny znak od a do z. .Na przykład Janet Jones z numerem członkowskim 1. | |
[0-9] | [0-9] służy do dopasowywania dowolnej cyfry od 0 do 9. | WYBIERZ * Z `członków` GDZIE `numer_kontaktu` REGEXP '[0-9]' poda wszystkim członkom podane numery kontaktowe zawierające znaki „[0-9]”. Na przykład Robert Phil. | |
^ | karetka (^) służy do rozpoczynania meczu od początku. | WYBIERZ * Z `filmów` GDZIE `tytuł` REGEXP '^[cd]'; podaje wszystkie filmy, których tytuł zaczyna się od dowolnej postaci z „cd”. Na przykład Code Name Black, Daddy's Little Girls i Da Vinci Code. | |
| | pionowy pasek (|) służy do izolowania alternatyw. | WYBIERZ * Z `filmów` GDZIE `tytuł` REGEXP '^[cd]|^[u]'; podaje wszystkie filmy o tytule rozpoczynającym 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. | WYBIERZ * Z `filmów` GDZIE `tytuł` REGEXP '[[:<:]]dla';
podaje wszystkie filmy z tytułami zaczynającymi się od bohaterów. Na przykład: Zapomnienie o Sarah Marshal. |
|
[[:>:]] | [[:>:]] dopasowuje końcówki wyrazów. | WYBIERZ * Z `filmów` GDZIE `tytuł` REGEXP 'potwierdzenie[[:>:]]';
podaje wszystkie filmy, których tytuły kończą się na znaki „ack” .Na przykład nazwa kodowa czarny. |
|
[:klasa:] | [:klasa:] pasuje do klasy znaków, tj
[:alfa:] dopasować litery, [:przestrzeń:] dopasować białą przestrzeń, [:punkt:] to dopasowanie znaków interpunkcyjnych i [:upper:] dla liter wyższej klasy. |
WYBIERZ * Z `filmów` GDZIE `tytuł` REGEXP '[:alpha:]';
daje, że 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 (\) jest używany jako znak ucieczki. 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ą wydajne i elastyczne dopasowanie wzorców, które może pomóc nam we wdrażaniu narzędzi wyszukiwania zaawansowanego w naszych systemach baz danych.
- REGEXP to operator używany podczas dopasowywania wzorców wyrażeń regularnych. RLIKE to synonim
- Wyrażenia regularne obsługują wiele metaznaków, co pozwala na większą elastyczność i kontrolę podczas dopasowywania wzorców.
- Ukośnik odwrotny jest używany jako znak ucieczki w wyrażeniach regularnych. Jest brany pod uwagę w dopasowaniu wzorca tylko wtedy, gdy użyto podwójnych ukośników odwrotnych.
- W wyrażeniach regularnych wielkość liter nie jest rozróżniana.