Normal ifadeler nedir?
Normal İfadeler, karmaşık ölçütlerle eşleşen verilerin aranmasına 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 edebildiğinizde neden normal ifadeleri öğrendiğinizi soruyor olabilirsiniz. Çünkü, joker karakterlere kıyasla, düzenli ifadeler, daha karmaşık kriterlerle eşleşen verileri aramamıza izin verir.
Temel sözdizimi
Normal bir ifade için temel sözdizimi aşağıdaki gibidir
SELECT statements… WHERE fieldname REGEXP 'pattern';
İŞTE -
- "SELECT ifadeleri…" standart SELECT ifadesidir
- "NEREDE alan adı " , üzerinde normal ifadenin gerçekleştirileceği sütunun adıdır.
- "REGEXP" kalıbı "" REGEXP, normal ifade operatörüdür ve "kalıp", REGEXP ile eşleştirilecek kalıbı gösterir. RLIKE , REGEXP ile eşanlamlıdır ve REGEXP ile aynı sonuçları elde eder. LIKE işleciyle karıştırılmasını önlemek için bunun yerine REGEXP kullanmak daha iyidir .
Ş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ı fark etmez. 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 bir normal ifade kullanabiliriz.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Yukarıdaki betiği MySQL çalışma tezgahında myflixdb ile çalıştırmak bize aşağıdaki sonuçları verir.
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 normal 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 charlist [abcd], sonuç kümemizde yalnızca a, b, c veya d ile başlayan film başlıklarının döndürüleceği anlamına gelir.
Yukarıdaki betiğimizi değiştirip NOT karakter listesini kullanalım ve sorgumuzu çalıştırdıktan sonra hangi sonuçları alacağımızı görelim.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Yukarıdaki betiği MySQL çalışma tezgahında myflixdb ile çalıştırmak bize aşağıdaki sonuçları verir.
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 normal ifademize yakından bakalım.
'[abcd]' düzeltme işareti (^), kalıp eşlemesinin başlangıçta uygulanması gerektiği anlamına gelir ve karakter listesi [abcd], kapalı karakterlerden herhangi biriyle başlayan film başlıklarının sonuç kümesinden hariç tutulacağı anlamına gelir.
Normal ifade meta karakterleri
Yukarıdaki örnekte baktığımız şey, bir düzenli ifadenin en basit şeklidir. Şimdi daha gelişmiş düzenli ifade kalıbı 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, bu konuda nasıl hareket edebiliriz? Cevap meta karakterlerdir. Normal ifadeler kullanarak kalıp arama sonuçlarımızda ince ayar yapmamıza olanak tanırlar.
Char | Açıklama | Misal | |
---|---|---|---|
* | Yıldız işareti (*) meta, kendinden önce gelen şeritlerinin sıfır (0) veya daha fazla örnek eşleştirmek için kullanılan | REGEXP 'da *' adlı filmlerden * SEÇİN; "da" karakterlerini içeren tüm filmleri verecektir. Örneğin, Da Vinci Kodu, Babanın Küçük Kızları. | |
+ | Artı (+) meta, kendinden önce gelen şeritlerinin bir veya birkaç örneğini eşleştirmek için kullanılır. | SEÇİN * "filmler" NEREDE "başlık" REGEXP 'ay +'; "mon" karakterlerini içeren tüm filmleri verecektir. Örneğin, Melekler ve Şeytanlar. | |
? | Soru (?) Meta karakteri, sıfır (0) veya ondan önceki dizelerin bir örneğini eşleştirmek için kullanılır. | SEÇİN * "kategoriler` NEREDE" kategori_adı` REGEXP 'com?'; string com içeren tüm kategorileri verecektir. Örneğin, komedi, romantik komedi. | |
. | Nokta (.) Kullanılır metakarakterdir yeni bir satırın dışında herhangi bir tek karakteri eşleştirmek için. | "Year_released` REGEXP '200.' NEREDE FİLMLERDEN SEÇİN *; "200" karakteriyle başlayıp herhangi bir tek karakterin izlediği yıllarda vizyona giren tüm filmleri verecektir. Örneğin, 2005,2007,2008 vb. | |
[ABC] | Bağlı karakterler [abc] içine herhangi bir karakter eşleştirmek için kullanılır. | SEÇİN * "filmler" NEREDE "başlık" REGEXP '[vwxyz]'; "vwxyz" de herhangi bir karakter içeren tüm filmleri verecektir. Örneğin, X-Men, Da Vinci Kodu, vb. | |
[abc] | Charlist [abc] kapalı olanları hariç herhangi bir karakter eşleştirmek için kullanılır. | SEÇİN * "filmler" NEREDEN "başlık" REGEXP '[vwxyz]'; "vwxyz" de olanlar dışındaki karakterleri içeren tüm filmleri verecektir. | |
[AZ] | [AZ] herhangi büyük harf maç için kullanılır. | SEÇİN * `üyeler` NEREDE` postal_address` REGEXP '[AZ]'; A'dan Z'ye herhangi bir karakter içeren posta adresine sahip tüm üyelere… Örneğin, üyelik numarası 1 olan Janet Jones. | |
[az] | [Az] herhangi küçük harf eşleştirmek için kullanılır | SEÇİN * 'üyeler` NEREDE `postal_address` REGEXP' [az] '; a'dan z'ye herhangi bir karakter içeren posta adresi olan tüm üyelere verilecektir… Örneğin, üyelik numarası 1 olan Janet Jones. | |
[0-9] | [0-9] 9 0 ile herhangi bir rakam eşleştirmek için kullanılır. | SELECT * FROM `members` WHERE` contact_number` REGEXP '[0-9]', tüm üyelere "[0-9]" karakterlerini içeren iletişim numaralarını gönderecektir. Örneğin, Robert Phil. | |
^ | Şapka (^) başlayarak her yıl maçı başlatmak için kullanılır. | SEÇİN * "filmler" NEREDE "başlık" REGEXP '[cd]'; "cd" deki karakterlerden herhangi biriyle başlayan tüm filmleri verir. Örneğin, Kod Adı Siyah, Babanın Küçük Kızları ve Da Vinci Kodu. | |
| | Dikey çubuk (|) izolatı alternatifler için kullanılır. | SEÇİN * "filmler" NEREDE "başlık" REGEXP '[cd] | [u]'; "cd" veya "u" daki karakterlerden herhangi biriyle başlayan tüm filmleri verir. Örneğin, Siyah Kod Adı, Babanın Küçük Kızı, Da Vinci Kodu ve Karanlıklar Ülkesi - Uyanış. | |
[[: <:]] | [[: <:]] Kelimelerin başıyla eşleşir. | SEÇİN * "filmler" NEREDE "başlık" REGEXP '[[: <:]] için'; karakterlerden başlayarak tüm filmleri verir. Örneğin: Sarah Marshal'ı Unutmak. | |
[[:>:]] | [[:>:]] Kelimelerin sonuyla eşleşir. | SEÇİN * "filmler" NEREDE "başlık" REGEXP 'ack [[:>:]]'; "ack" karakterleriyle biten başlıklara sahip tüm filmleri verir. Örneğin, Kod Adı Siyah. | |
[:sınıf:] | [: Sınıf:] Bir karakter sınıfını yani eşleşir [: alpha:] eşleşecek şekilde mektuplar, [: space:] [: punct:] boşluk, maç etmektir maç noktalama işareti ve [: üst:] üst sınıf mektuplar için. | SEÇİN * "filmler" NEREDE "başlık" REGEXP '[: alfa:]'; başlıkları olan tüm filmlerin sadece harf içermesini sağlar. Örneğin, Unutma Sarah Marshal, X-Men vb. Karayip Korsanları 4 gibi filmler bu sorgu ile çıkarılacaktır. |
Ters eğik çizgi (\) bir çıkış karakteri olarak kullanılır. Bunu düzenli ifadede desenin bir parçası olarak kullanmak istiyorsak, çift ters eğik çizgi (\\) kullanmalıyız.
Özet
- Normal ifadeler, veritabanı sistemlerimiz için güçlü arama yardımcı programları uygulamamıza yardımcı olabilecek güçlü ve esnek bir kalıp eşleşmesi sağlar.
- REGEXP, normal ifade kalıbı eşleşmeleri gerçekleştirilirken kullanılan işleçtir. RLIKE eşanlamlıdır
- Normal ifadeler, kalıp eşleşmeleri gerçekleştirilirken daha fazla esneklik ve kontrol sağlayan bir dizi meta karakteri destekler.
- Ters eğik çizgi, normal ifadelerde bir çıkış karakteri olarak kullanılır. Yalnızca çift ters eğik çizgi kullanılmışsa desen eşleşmesinde dikkate alınır.
- Normal ifadeler büyük / küçük harfe duyarlı değildir.