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 tabirdir, genellikle "regex" ya da "regexp" olarak kısaltılmış terimler 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ı kullanıcı adını seçtiğinde kullanıcı adı için kurallar belirlemek istiyorsunuz. Kullanıcı adının harfler, sayılar, altçizgiler ve tireler içermesine izin vermek istiyoruz. Ayrıca, Kullanıcı adındaki karakter sayısını sınırlamak istiyoruz böylece çirkin görünmeyecek. Bir kullanıcı adını doğrulamak için aşağıdaki düzenli ifadeyi kullanıyoruz:
Yukardaki düzenli ifade john_doe
, jo-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.
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.
"the" => The fat cat sat on the mat.
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.
"The" => The fat cat sat on the mat.
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 karakter | Açıklama |
---|---|
. | Satır sonuc 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 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. |
| | ` |
\ | Sonraki karakteri kaçırır. Bu, ayrılmış karakterleri eşleştirmenizi sağlar [ ] ( ) { } . * + ? ^ $ \ | |
^ | Girilen verinin başlangıcını ifade eder. |
$ | Girilen veririnin sonunu ifade eder. |
Nokta .
meta karakterin 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.
".ar" => The car parked in the garage.
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.
"[Tt]he" => The car parked in the garage.
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.
"ar[.]" => A garage is a good place to park a car.
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.
"[^c]ar" => The car parked in the garage.
+
, *
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.
*
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 tekrarı.
[a-z]*
düzenli ifadesinin anlamı: bir satırdaki herhangi bir sayıdaki küçük harfler.
"[a-z]*" => The car parked in the garage #21.
*
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.
"\s*cat\s*" => The fat cat sat on the concatenation.
+
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.
"c.+t" => The fat cat sat on the mat.
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 e
karakteri gelir.
"[T]he" => The car is parked in the garage.
"[T]?he" => The car is parked in the garage.
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ş.
"[0-9]{2,3}" => The number was 9.9997 but we rounded it off to 10.0.
İ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.
"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
"[0-9]{3}" => The number was 9.9997 but we rounded it off to 10.0.
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 c
, g
veya p
karakteri, ardından a
karakteri, ardından r
karakteri gelir.
"(c|g|p)ar" => The car is parked in the garage.
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.
"(T|t)he|car" => The car is parked in the garage.
\
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 f
, c
ya da m
harfi, ardından küçük a
harfi, ardından küçük t
harfi, ardından opsiyonel .
karakteri gelir.
"(f|c|m)at\.?" => The fat cat sat on the mat.
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, ve ikinci çeşit eşleşen karakterin girişin son karakteri olup olmadığını kontrol eden dolar $
karakteridir.
Ş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 ^a
dü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.
"(T|t)he" => The car is parked in the garage.
"^(T|t)he" => The car is parked in the garage.
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.
"(at\.)" => The fat cat. sat. on the mat.
"(at\.)$" => The fat cat. sat. on the mat.
Regex, yaygın olarak kullanılan düzenli ifadeler için uygun kısaltmalar sunan sık kullanılan karakter setleri için kısaltmalar sağlar.
Kullanılan karakter setleri kısaltmaları aşağıdaki gibidir:
Kısaltma | Açıklama |
---|---|
. | Satır başı hariç herhangi bir karakter |
\w | Alfanumerik karakterlerle eşleşir: [a-zA-Z0-9_] |
\W | Alfanumerik olmayan karakterlerle eşleşir: [^\w] |
\d | Rakamlarla eşlelir: [0-9] |
\D | Rakam olmayan karakterlerle eşleşir: [^\d] |
\s | Boşluk karakteri ile eşleşir: [\t\n\f\r\p{Z}] |
\S | Boşluk karakteri olmayan karakterlerle eşleşir: [^\s] |
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.
Düzenli ifadelerde kullanılan bakınma sembolleri aşağıdadır:
Sembol | Açı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. |
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.
"[T|t]he(?=\sfat)" => The fat cat sat on the mat.
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 e
harfi gelir, ardından öncesinde boşluk olan bir fat
öbeği olmamalıdır.
"[T|t]he(?!\sfat)" => The fat cat sat on the mat.
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.
"(?<=[T|t]he\s)(fat|mat)" => The fat cat sat on the mat.
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.
"(?<![T|t]he\s)(cat)" => The cat sat on cat.
İş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.
İşaret | Açıklama |
---|---|
i | Büyük küçük harf duyarlılık: Eşleştirmeleri küçük/büyük harfe karşı duyarsız yapar. |
g | Genel Arama: Girilen harf öbeği boyunca bir desen arar. |
m | Çok satırlı: Sabitleyici meta karakteri her satırda çalışır. |
ì
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.
"The" => The fat cat sat on the mat.
"/The/gi" => The fat cat sat on the mat.
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.
"/.(at)/" => The fat cat sat on the mat.
"/.(at)/g" => The fat cat sat on the mat.
m
işareti çok satırlı bir eşleşme sağlamak 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.
"/.at(.)?$/" => The fat cat sat on the mat.
"/.at(.)?$/gm" => The fat cat sat on the mat.
- Report issues
- Open pull request with improvements
- Spread the word
- Reach out to me directly at [email protected] or
MIT © Zeeshan Ahmed