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.