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.