Regex,regexp nedir?

Düzenli İfade Nedir?

Düzenli ifade, bir metinden belirli bir deseni bulmak için kullanılan bir karakter veya sembol grubudur.

Bir düzenli ifade soldan sağa söz konusu harf öbekleriyle eşleşen bir desendir. “Regular expression” söylemesi zor bir tabir olduğundan dolayı, genellikle “regex” ya da “regexp” olarak kısaltılmış olarak bulacaksınız. Düzenli ifade bir harf öbeğinde ki bir metin değiştirmek, form doğrulamak, bir desen eşleşmesine dayalı harf öbeğinden bir alt harf öbeği ayıklamak ve çok daha fazlası için kullanılır.

Bir uygulama yazdığınızı hayal edin ve bir kullanıcı adını seçtiğinde, bu kullanıcı adı için kurallar belirlemek istiyorsunuz. Kullanıcı adının harfler, sayılar, altçizgiler ve tireler içermesine izin vermek, ayrıca, kullanıcı adındaki karakter sayısını sınırlamak istiyorsunuz, böylece çirkin görünmeyecek. Böyle durumlarda kullanıcı adını doğrulamak için aşağıdaki düzenli ifadeyi kullanıyoruz:

Regular expression

Yukardaki düzenli ifade john_doejo-hn_doe ve john12_as gibi girişleri kabul edebilir. Jo girişi uyuşmaz, çünkü harf öbeği büyük harf içeriyor ve aynı zamanda uzunluğu 3 karakterden az.

İçindekiler

1. Temel Eşleştiriciler

Bir düzenli ifade bir metin içinde arama yapabilmek için kullandığımız bir karakter desenidir. Örneğin, the düzenli ifadesi şu anlama gelir: t harfi ardından h, ardından e harfi gelir.

Düzenli ifadeyi test edin

123 düzenli ifadesi 123 harf öbeğiyle eşleşir. Düzenli ifade birbiri ardına, girilen harf öbeğindeki her karakter düzenli ifadenin içindeki her karakterle karşılaştırılarak eşleştirilir. Düzenli ifadeler normal olarak büyük/küçük harfe duyarlıdırlar, yani The düzenli ifadesi the harf öbeğiyle eşleşmez.

Düzenli ifadeyi test edin

2. Meta Karakterler

Meta karakterler düzenli ifadelerin yapı taşlarıdırlar. Meta karakterler kendileri için değil bunun yerine bazı özel yollarla yorumlanırlar. Bazı meta karakterler özel anlamları vardır ve bunlar köşeli parantez içinde yazılırlar.

Meta karakterler aşağıdaki gibidir:

Meta karakterAçıklama
.Satır sonuç hariç herhangi bir karakterle eşleşir.
[ ]Köşeli parantezler arasında bulunan herhangi bir karakterle eşleşir.
[^ ]Köşeli parantez içerisinde yer alan ^ işaretinden sonra girilen karakterler haricindeki karakterlerle eşleşir.
*Kendisinden önce yazılan karakterin sıfır veya daha fazla tekrarı ile eşleşir.
+Kendisinden önce yazılan karakterin bir veya daha fazla olan tekrarı ile eşleşir.
?Kendisinden önce yazılan karakterin varlık durumunu opsiyonel kılar.
{n,m}Kendisinden önce yazılan karakterin en az n en fazla m değeri kadar olmasını ifade eder.
(xyz)Verilen sırayla xyz karakterleriyle eşleşir.
|Karakterden önce veya sonra verilen ifadelerin herhangi biriyle eşleşebilir. İfadeye Yada anlamı katar.
\[ ] ( ) { } . * + ? ^ $ \ | özel karakterin aranmasını sağlar.
^Girilen verinin başlangıcını ifade eder.
$Girilen verinin sonunu ifade eder.

2.1 Nokta

Nokta . meta karakterlerin en basit örneğidir. . meta karakteri satır başlangıcı hariç herhangi bir karakterle eşleşir. Örneğin, .ar düzenli ifadesinin anlamı: herhangi bir karakterin ardından a harfi ve r harfi gelir.

Düzenli ifadeyi test edin

2.2 Karakter Takımı

Karakter takımları aryıca Karakter sınıfı olarak bilinir. Karakter takımlarını belirtmek için köşeli ayraçlar kullanılır. Karakterin aralığını belirtmek için bir karakter takımında tire kullanın. Köşeli parantezlerdeki karakter aralığının sıralaması önemli değildir.

Örneğin, [Tt]he düzenli ifadesinin anlamı: bir büyük T veya küçük t harflerinin ardından sırasıyla h ve e harfi gelir.

Düzenli ifadeyi test edin

Bununla birlikte, bir karakter takımı içerisindeki bir periyot bir tam periyot demektir.

ar[.] düzenli ifadesinin anlamı: Küçük a karakteri ardından r harfi gelir, ardından bir . karakteri gelir.

Düzenli ifadeyi test edin

2.2.1 Negatiflenmiş karakter seti

Genellikle, şapka ^ sembolü harf öbeğinin başlangıcını temsil eder, ama köşeli parantez içinde kullanıldığında verilen karakter takımını hariç tutar.

Örneğin, [^c]ar ifadesinin anlamı: c harfinden hariç herhangi bir harfin ardından a, ardından r gelir.

Düzenli ifadeyi test edin

2.3 Tekrarlar

+* ya da ? meta karakterlerinden sonra bir alt desenin kaç defa tekrar edebileceğini belirtmek için kullanılır. Bu meta karakterler farklı durumlarda farklı davranırlar.

2.3.1 Yıldız İşareti

* sembolü, kendinden önce girilen eşlemenin sıfır veya daha fazla tekrarıyla eşleşir. Ama bir karakter seti ya da sınıf sonrasına girildiğinde, tüm karakter setinin tekrarlarını bulur.

a* düzenli ifadesinin anlamı: a karakterinin sıfır veya daha fazla tekrarları, [a-z]* düzenli ifadesinin anlamı ise bir satırdaki herhangi bir sayıdaki küçük harfler anlamına gelir.

Düzenli ifadeyi test edin

* sembolü . meta karakteri ile .* karakterinin herhangi harf öbeğine eşleştirmek için kullanılabilir. * sembolü boşluk karakteriyle \s bir harf öbeğinde boşluk karakterlerini eşleştirmek için kullanılabilir.

Örneğin, \s*cat\s* düzenli ifadesinin anlamı: sıfır veya daha fazla boşluk ardından küçük c karakteri gelir, ardından küçük a karakteri gelir, ardından küçük t karakteri gelir, ardından sıfır veya daha fazla boşluk gelir.

Düzenli ifadeyi test edin

2.3.2 Artı İşareti

+ sembolü, kendinden önce girilen eşlemenin bir veya daha fazla tekrarıyla eşleşir.

Örneğin, c.+t ifadesinin anlamı: küçük c harfi, ardından en az bir karakter gelir, ardından küçük t karakteri gelir. Örnekte açıklamak gereken önemli nokta: t harfi cümledeki son t harfi olacaktır. c ve t harfi arasında en az bir karakter vardır.

Düzenli ifadeyi test edin

2.3.3 Soru İşareti

Düzenli ifadelerde ? meta karakterinden önce girilen karakteri opsiyonel olarak tanımlar. Bu sembol önce gelen karakterin sıfır veya bir örbeğiyle eşleşir.

Örneğin, [T]?he ifadesinin anlamı: opsiyonel büyük T harfi, ardından küçük h karakteri gelir, ardından küçük ekarakteri gelir.

Düzenli ifadeyi test edin

Düzenli ifadeyi test edin

2.4 Süslü Parantez

Düzenli ifadelerde miktar belirliyiciler olarakda bilinen süslü parantezler, bir karakterin veya karakter grubunun kaç defa tekrar edebileceğini belirtmek için kullanılırlar.

Örneğin, [0-9]{2,3} ifadesinin anlamı: 0 ile 0 aralığındaki karakterlerden, en az 2 en fazla 3 defa ile eşleş.

Düzenli ifadeyi test edin

İkinci numarayı boş bırakabiliriz.

Örneğin, [0-9]{2,} ifadesinin anlamı: En az 2 veya daha fazla defa eşleş. Düzenli ifadeden virgülü kaldırırsak [0-9]{3}: doğrudan 3 defa eşleşir.

Düzenli ifadeyi test edin

Düzenli ifadeyi test edin

2.5 Karakter Grubu

Karakter grubu parantezler içine yazılmış alt desenler grubudur. Daha önce tasarım deseninde değindiğimiz gibi, bir karakterden önce bir miktar belirleyici koyarsak önceki karakteri tekrar eder. Fakat miktar belirleyiciyi bir karakter grubundan sonra koyarsak tüm karakter grubunu tekrarlar.

Örneğin: (ab)* düzenli ifadesi “ab” karakterinin sıfır veya daha fazla tekrarıyla eşleşir.

Ayrıca karakter grubu içinde | meta karakterini kullanabiliriz.

Örneğin, (c|g|p)ar düzenli ifadesinin anlamı: küçük cg veya p karakteri, ardından a karakteri, ardından rkarakteri gelir.

Düzenli ifadeyi test edin

2.6 Değişim

Düzenli ifadede dik çizgi alternasyon(değişim, dönüşüm) tanımlamak için kullanılır. Alternasyon birden fazla ifade arasındaki bir koşul gibidir. Şu an, karakter grubu ve alternasyonun aynı şekilde çalıştığını düşünüyor olabilirsiniz. Ama, Karakter grubu ve alternasyon arasındaki büyük fark karakter grubu karakter düzeyinde çalışır ama alternasyon ifade düzeyinde çalışır.

Örneğin, (T|t)he|car düzenli ifadesinin anlamı: Büyük T ya da küçük t karakteri, ardından küçük h karakteri, ardından küçük e ya da c karakteri, ardından küçük a, ardından küçük r karakteri gelir.

Düzenli ifadeyi test edin

2.7 Özel Karakter Hariç Tutma

\ işareti sonraki karakteri hariç tutmak için kullanılır. Bu bir semboülü ayrılmış karakterlerde { } [ ] / \ + * . $ ^ | ? dahil olmak üzere eşleşen bir karakter olarak belirtmemizi sağlar. Bir özel karakteri eşleşen bir karakter olarak kullanmak için önüne \ işareti getirin.

Örneğin, . düzenli ifadesi yeni satır hariç herhangi bir karakteri eşleştirmek için kullanılır. Bir harf öbeği içinde nokta .karakterini yakalamak için . ayrılmış karakterini hariç tutmamız gerekir. Bunun için nokta önüne \ işaretini koymamız gereklidir.

(f|c|m)at\.? düzenli ifadesinin anlamı: küçük fcya da m harfi, ardından küçük a harfi, ardından küçük t harfi, ardından opsiyonel . karakteri gelir.

Düzenli ifadeyi test edin

2.8 Sabitleyiciler

Düzenli ifadelerde, eşleşen sembolün girilen harf öbeğinin başlangıç sembolü veya bitiş sembolü olup olmadığını kontrol etmek için sabitleyicileri kullanırız. Sabitleyiciler iki çeşittir: İlk çeşit, eşleşen karakterin girişin ilk karakteri olup olmadığını kontrol eden şapka ^ karakteri, ikinci çeşit ise eşleşen karakterin girişin son karakteri olup olmadığını kontrol eden dolar $ karakteridir.

2.8.1 Şapka İşareti

Şapka ^ işareti eşleşen karakterin giriş harf öbeğinin ilk karakteri olup olmadığını kontrol etmek için kullanılır. Eğer ^adüzenli ifadesini abc harf öbeğine uygularsak a ile eşleşir. Ama ^b ifadesini uygularsak bir eşleşme bulamayız. Bunun nedeni abc harf öbeğinde b karakterinin başlangıç karakteri olmamasıdır.

Bir başka örnek üzerinden ilerlersek,

^(T|t)he düzenli ifadesinin anlamı: büyük T ya da t karakteri giriş harf öbeğinin ilk karakteri olmak üzere, ardından küçük h, ardından küçük e karakteri gelir.

Düzenli ifadeyi test edin

Düzenli ifadeyi test edin

2.8.2 Dolar İşareti

Dolar $ işareti eşleşen karakterin giriş harf öbeğinin son karakteri olup olmadığını kontrol etmek için kullanılır.

Örneğin, (at\.)$ ifadesinin anlamı: küçük bir a karakteri, ardından küçük bir t karakteri, ardıdan nokta . karakteri gelir ve bu eşleşme harf öbeğinin sonunda olmalıdır.

Düzenli ifadeyi test edin

Düzenli ifadeyi test edin

3. Kısaltma Karakter Takımları

Regex, sık olarak kullanılan düzenli ifadeler için özel karakter setleri ve kısaltmalar sağlar.

Kullanılan karakter setlerinin kısaltmaları aşağıdaki gibidir:

KısaltmaAçıklama
.Satır başı hariç herhangi bir karakter
\wAlfanumerik karakterlerle eşleşir: [a-zA-Z0-9_]
\WAlfanumerik olmayan karakterlerle eşleşir: [^\w]
\dRakamlarla eşlelir: [0-9]
\DRakam olmayan karakterlerle eşleşir: [^\d]
\sBoşluk karakteri ile eşleşir: [\t\n\f\r\p{Z}]
\SBoşluk karakteri olmayan karakterlerle eşleşir: [^\s]

4. Bakınmak

Bakınma sembolleri, bir ifade öncesinde veya sonrasında başka bir ifademiz olduğunda kullanılırlar.

Örneğin, $4.44 ve $10.88 girişlerinden $ karakteri önündeki tüm sayıları almak istiyoruz, bu durumda (?<=\$)[0-9\.]* ifadesini kullanırız.

(?<=\$)[0-9\.]* ifadesinin anlamı: . karakterini içeren ve $ karakteriyle devam eden tüm sayıları al demektir.

Düzenli ifadelerde kullanılan bakınma sembolleri aşadaki gibidir:

SembolAçıklama
?=Positive Lookahead (Verdiğimiz ifade sonrası arar ve eşleşme varsa sonuç döndürür.)
?!Negative Lookahead (Verdiğimiz ifade sonrası arar ve eşleşme yoksa sonuç döndürür.)
?<=Positive Lookbehind (Verdiğimiz ifade öncesini arar ve eşleşme varsa sonuç döndürür.)
?<-!-Negative Lookbehind Verdiğimiz ifade öncesini arar ve eşleşme yoksa sonuç döndürür.

4.1 Positive Lookahead

Positive Lookahead, ifadenin ilk bölümü bakınma ifadesiyle devam etmesi gerektiğini savunur. Bulunan eşleşme yalnızca ifadenin ilk bölümüyle eşleşen metin içerir. Olumlu bir bakınma tanımlamak için, içinde eşittir işareti yer alan parantezler (?=...) şeklinde kullanılır. Bakınma ifadesi parantezler içinde eşittir işaretinden sonra yazılır.

Örneğin, [T|t]he(?=\sfat) ifadesinin anlamı: opsiyonel küçük bir t ya da büyük T harfi, ardından h harfi gelir, ardından e harfi gelir. Parantez içinde ise bu dizilimin bir boşluk karakterinden sonra fat öbeğiyle devam edeceğini tanımlıyoruz.

Düzenli ifadeyi test edin

4.2 Negative Lookahead

Negative Lookahead sembolü positive lookahead tersine, verdiğimiz desenle devam etmemesi durumunda eşleşir. Bu sembol positive lookahead gibi tanımlanır ama = işareti yerine ! kullanılır.

[T|t]he(?!\sfat) ifadesinin anlamı: opsiyonel küçük bir t ya da büyük T harfi, ardından h harfi gelir, ardından eharfi gelir, ardından öncesinde boşluk olan bir fat öbeği olmamalıdır.

Düzenli ifadeyi test edin

4.3 Positive Lookbehind

Positive Lookbehind, belirli bir desenden önceki eşleşmeleri almak için kullanılır. (?<=...) ile gösterilir.

Örneğin, (?<=[T|t]he\s)(fat|mat) ifadesinin anlamı: Öncesinde The veya the öbekleri olan tüm fat veya matöbeklerini getir.

Düzenli ifadeyi test edin

4.4 Negative Lookbehind

Negative Lookbehind, belirli bir desenden önce olmayan eşleşmeleri almak için kullanılır. (?<=!..) ile gösterilir.

Örneğin, (?<!(T|t)he\s)(cat) ifadesinin anlamı: Öncesinde The veya the öbekleri yer almayan tüm cat öbeklerini getir.

Düzenli ifadeyi test edin

5. İşaretler

İşaretler ayrıca düzenleyiciler olarak bilinirler, çünkü onlar bir düzenli ifadenin çıktısını düzenlerler. Bu işaretler herhangi bir sırada veya kombinasyonda kullanılabilirler, ve bunlar Düzenli İfadelerin ayrılmaz bir parçasıdırlar.

İşaretAçıklama
iBüyük küçük harf duyarlılık: Eşleştirmeleri küçük/büyük harfe karşı duyarsız yapar.
gGenel Arama: Girilen harf öbeği boyunca bir desen arar.
mÇok satırlı: Sabitleyici meta karakteri her satırda çalışır.

5.1 Büyük/Küçük harf duyarlılığı

i işaretleyicisi büyük/küçük harfe duyarsız eşleştirme yapmak için kullanılır.

Örneğin, /The/gi ifadesi: büyük T harfi, ardından küçük h harfi, ardından küçük e harfi gelir. ifadenin sonunda yer alan i işareti büyük-küçük harfe karşı duyarsız olması gerektiğini belirtir. Ayrıca g işaretinide kullandığımızı görebilirsiniz, tüm text içinde bu aramayı yapmak istediğimiz için g işaretini ayrıca belirtiyoruz.

Düzenli ifadeyi test edin

Düzenli ifadeyi test edin

5.2 Genel Arama

g işareti bir giriş içinde eşleşen tüm varsayonları bulmak için kullanılır. g işareti kullanılmazsa ilk eşleşme bulunduktan sonra arama sona erer.

Test the regular expression

Düzenli ifadeyi test edin

5.3 Çok Satırlı

m işareti çok satırlı bir eşleşme bulmak için kullanılır. Daha önce sabitleyicilerde gördüğümüz gibi (^, $) sembolleri aradığımız desenin harf öbeğinin başında veya sonunda olup olmadığını kontrol etmemiz için kullanılır. Bu sabitleyicilerin tüm satırlarda çalışması için m işaretini kullanırız.

Örneğin, /at(.)?$/gm ifadesinin anlamı: küçük a harfi, ardından küçük t harfi gelir, ardından opsiyonel olarak yeni satır hariç herhangi birşey gelebilir. m işaretini kullandığımız için bir girişin her satırının sonunda eşleştirir.

Düzenli ifadeyi test edin

Düzenli ifadeyi test edin