Sözdizimi ve amp; Örnekler

Anonim

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.