Söz Dizimi ve Örneklerle MYSQL Düzenli İfadeleri (REGEXP)
Düzenli ifadeler nelerdir?
Düzenli İfadeler karmaşık ölçütlerle eşleşen verileri aramaya yardımcı olur. Önceki eğitimde joker karakterlere baktık. Daha önce joker karakterlerle çalıştıysanız, joker karakterleri kullanarak benzer sonuçlar elde edebiliyorken neden düzenli ifadeleri öğrenmeniz gerektiğini soruyor olabilirsiniz. Çünkü, joker karakterlerle karşılaştırıldığında, düzenli ifadeler daha karmaşık ölçütlerle eşleşen verileri aramamıza olanak tanır.
Temel sözdizimi
Düzenli bir ifadenin temel sözdizimi aşağıdaki gibidir
SELECT statements... WHERE fieldname REGEXP 'pattern';
BURADA -
- “SEÇ ifadeleri…” standart mı SELECT ifadesi
- “NEREDE alan adı” düzenli ifadenin gerçekleştirileceği sütunun adıdır.
- “REGEXP 'deseni'” REGEXP normal ifade operatörüdür ve 'desen', REGEXP tarafından eşleştirilecek modeli temsil eder. RLIKE olduğunu REGEXP'nin eşanlamlısı ve REGEXP ile aynı sonuçları elde eder. LIKE operatörüyle karıştırılmaması için REGEXP kullanmak daha iyi yerine.
Şimdi pratik bir örneğe bakalım-
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
Yukarıdaki sorgu, içinde kelime kodu bulunan tüm film başlıklarını arar. “Kod”un başlığın başında, ortasında veya sonunda olması önemli değildir. Başlıkta yer aldığı sürece dikkate alınacaktır.
Diyelim ki a, b, c veya d ile başlayan ve ardından herhangi bir sayıda başka karakter gelen filmleri aramak istiyoruz, bunu nasıl başarabiliriz? İstediğimiz sonuçları elde etmek için meta karakterlerle birlikte düzenli bir ifade kullanabiliriz.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Yukarıdaki betiğin çalıştırılması MySQL tezgâh myflixdb'ye karşı yaptığımız karşılaştırma bize şu sonuçları veriyor.
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 |
Şimdi yukarıdaki sonuçtan sorumlu olan düzenli ifademize yakından bakalım.
'^[abcd]' düzeltme işareti (^), kalıp eşleşmesinin başlangıçta uygulanması gerektiği anlamına gelir ve karakter listesi [abcd], sonuç kümemizde yalnızca a, b, c veya d ile başlayan film adlarının döndürüldüğü anlamına gelir.
Yukarıdaki betiğimizi değiştirelim ve NOT karakter listesini kullanalım ve sorgumuzu yürüttükten sonra hangi sonuçları alacağımızı görelim.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Yukarıdaki betiğin çalıştırılması MySQL workbench'ü myflixdb'ye karşı çalıştırdığımızda aşağıdaki sonuçlar ortaya çıkıyor.
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 |
Şimdi yukarıdaki sonuçlardan sorumlu olan düzenli ifademize yakından bakalım.
'^[^abcd]' düzeltme işareti (^), kalıp eşleşmesinin başlangıçta uygulanması gerektiği anlamına gelir ve karakter listesi [^abcd], ekteki karakterlerden herhangi biriyle başlayan film başlıklarının sonuç kümesinden hariç tutulduğu anlamına gelir.
Düzenli ifade meta karakterleri
Yukarıdaki örnekte incelediğimiz şey, düzenli ifadenin en basit biçimidir. Şimdi daha gelişmiş düzenli ifade modeli eşleşmelerine bakalım. Yalnızca normal bir ifade kullanarak "kod" kalıbıyla başlayan film başlıklarını aramak istediğimizi varsayalım, bunu nasıl yaparız? Cevap meta karakterlerdir. Düzenli ifadeler kullanarak kalıp arama sonuçlarımızda ince ayar yapmamıza olanak tanır.
Char | Açıklama | Örnek E-posta | |
---|---|---|---|
* | The yıldız işareti (*) meta karakter kendisinden önceki dizelerin sıfır (0) veya daha fazla örneğini eşleştirmek için kullanılır | SELECT * FROM filmlerden WHERE başlığı REGEXP 'da*'; “da” karakterlerini içeren tüm filmlere verecektir. Örneğin Da Vinci Şifresi, Babasının Küçük Kızları. | |
+ | The artı (+) metacharacter kendisinden önceki dizelerin bir veya daha fazla örneğini eşleştirmek için kullanılır. | SELECT * FROM `filmler` NEREDE `başlık` REGEXP 'mon+'; “mon” karakterlerini içeren tüm filmlere verecektir. Örneğin, Melekler ve Şeytanlar. | |
? | Soru(?) metakarakter kendisinden önceki dizelerin sıfır (0) veya bir örneğini eşleştirmek için kullanılır. | SELECT * FROM `kategoriler` NEREDE `kategori_adı` REGEXP 'com?'; string com içeren tüm kategorileri verecektir. Örneğin komedi, romantik komedi. | |
. | The nokta (.) meta karakter, yeni bir satır dışında herhangi bir tek karakteri eşleştirmek için kullanılır. | `Yıl_yayınlandığı` REGEXP '200.' filmlerinden * SEÇİN; “200” karakteriyle başlayan ve ardından herhangi bir tek karakterin geldiği yıllarda vizyona giren tüm filmleri verecektir. Örneğin, 2005,2007,2008 vb. | |
[ABC] | The karakter listesi [abc] kapalı karakterlerden herhangi biriyle eşleşmek için kullanılır. | SELECT * FROM `filmler` NEREDE `başlık` REGEXP '[vwxyz]'; “vwxyz” içinde herhangi bir tek karakteri içeren tüm filmleri verecektir. Örneğin, X-Men, Da Vinci Code, vb. | |
[^abc] | The karakter listesi [^abc] kapalı olanlar dışındaki herhangi bir karakterle eşleşmek için kullanılır. | SELECT * FROM `movies` WHERE `title` REGEXP '^[^vwxyz]'; “vwxyz” dışındaki karakterleri içeren tüm filmleri verecektir. | |
[AZ] | The [AZ] Herhangi bir büyük harfle eşleşmek için kullanılır. | SELECT * FROM `üyeler` WHERE `postal_address` REGEXP '[AZ]'; A'dan Z'ye herhangi bir karakter içeren posta adresi olan tüm üyelere verecektir. Örneğin, üyelik numarası 1 olan Janet Jones. | |
[az] | The [az] herhangi bir küçük harfle eşleştirmek için kullanılır | SELECT * FROM `üyeler` WHERE `postal_address` REGEXP '[az]'; a'dan z'ye herhangi bir karakter içeren posta adresi olan tüm üyelere verecektir. .Örneğin üyelik numarası 1 olan Janet Jones. | |
[0-9] | The [0-9] 0'dan 9'a kadar herhangi bir rakamı eşleştirmek için kullanılır. | SELECT * FROM `üyeler` NEREDE `kişi_numarası` REGEXP '[0-9]' Gönderilen tüm üyelere “[0-9]” karakterlerini içeren iletişim numaraları verilecektir. Örneğin, Robert Phil. | |
^ | The düzeltme işareti (^) Maça en baştan başlamak için kullanılır. | SELECT * FROM `filmler` WHERE `title` REGEXP '^[cd]'; başlığı “cd”deki karakterlerden herhangi biriyle başlayan tüm filmleri verir. Örneğin Kod Adı Siyah, Babasının Küçük Kızları ve Da Vinci Şifresi. | |
| | The dikey çubuk (|) Alternatifleri izole etmek için kullanılır. | SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]|^[u]'; başlığı “cd” veya “u” karakterlerinden herhangi biriyle başlayan tüm filmleri verir. Örneğin Kod Adı Siyah, Babasının Küçük Kızı, Da Vinci Şifresi ve Yeraltı Dünyası – Awakening. | |
[[:<:]] | The[[:<:]] kelimelerin başlangıcıyla eşleşir. | SELECT * FROM `filmler` WHERE `title` REGEXP '[[:<:]]for';
tüm filmlere karakterlerle başlayan başlıklar verir. Örnek: Sarah Marshal'ı unutmak. |
|
[[:>:]] | The [[:>:]] kelimelerin sonlarıyla eşleşir. | SELECT * FROM `filmler` WHERE `başlık` REGEXP 'ack[[:>:]]';
başlığı “ack” karakteriyle biten tüm filmleri verir .Örneğin Kod Adı Siyah. |
|
[:sınıf:] | The [:sınıf:] bir karakter sınıfıyla eşleşir, yani
[:alfa:] Harfleri eşleştirmek için, [:Uzay:] beyaz alanı eşleştirmek için, [:nokta:] noktalama işaretlerini ve üst sınıf harfler için [:upper:]'ı eşleştirir. |
SELECT * FROM `filmler` WHERE `title` REGEXP '[:alpha:]';
başlıkları olan tüm filmlerin yalnızca harf içermesini sağlar .Örneğin Sarah Marshal'ı Unutmak, X-Men vb. Karayip Korsanları 4 gibi filmler bu sorgu tarafından hariç tutulacaktır. |
Ters eğik çizgi (\) kaçış karakteri olarak kullanılır. Bunu düzenli ifadedeki desenin bir parçası olarak kullanmak istiyorsak, çift ters eğik çizgi (\\) kullanmalıyız
ÖZET
- Düzenli ifadeler, veritabanı sistemlerimiz için güçlü arama yardımcı programlarını uygulamamıza yardımcı olabilecek güçlü ve esnek bir kalıp eşleşmesi sağlar.
- REGEXP, düzenli ifade modeli eşleşmeleri gerçekleştirirken kullanılan operatördür. RLIKE eşanlamlıdır
- Düzenli ifadeler, kalıp eşleşmeleri gerçekleştirirken daha fazla esneklik ve kontrol sağlayan bir dizi meta karakteri destekler.
- Ters eğik çizgi, düzenli ifadelerde kaçış karakteri olarak kullanılır. Yalnızca çift ters eğik çizgi kullanılmışsa desen eşleşmesinde dikkate alınır.
- Düzenli ifadeler büyük/küçük harfe duyarlı değildir.