- English
- Español
- Français
- Português do Brasil
- 中文版
- 日本語
- 한국어
- Turkish
- Greek
- Magyar
- Polish
- Русский
- Tiếng Việt
- فارسی
- עברית
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:
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.
- Temel Eşleştiriciler
- Meta Karakterler
- Kısaltma Karakter Takımları
- Bakınmak
- İşaretler
- Açgözlü vs Tembel Eşleştirme
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 başlangıcı 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. |
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.
".ar" => The car parked in the garage.
Karakter takımları ayrı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
tekrarları, [a-z]*
düzenli ifadesinin anlamı ise bir satırdaki herhangi bir
sayıdaki küçük harfler anlamına gelir.
"[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 9 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.
Not olarak yakalanan gruplar yalnızca eşleşmez, ayrıca yakalanan karakterler ana dil içinde kullanılır.Bu ana dil Python,JavaScript ve neredeyse herhangi bir dilde düzenli ifadelerin fonksiyon tanımlamalarında olabilir.
Karakter grubu olmayan bir grup, karakterlerle eşleşen ancak grubu yakalayamayan bir yakalama grubudur. Karakter grubu olmayan bir grup parantez içinde(...)
önce ?
ve ardından :
ile gösterilir. Örneğin, (?:c|g|p)ar
düzenli ifadesi, aynı karakterlerle eşleştiği ancak bir yakalama grubu oluşturmayacağı için (c|g|p)ar
ifadesine benzer.
"(?:c|g|p)ar" => The car is parked in the garage.
Karakter grubu olmayanlar bul-ve-değiştir işlevselliğinde kullanıldığında veya karakter gruplarıyla karıştırıldığında, herhangi bir başka tür çıktı üretirken genel görünümü korumak için kullanışlı olabilir. Ayrıca bakınız 4. Bakınmak.
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, ikinci çeşit ise
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, 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ı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 demektir.
Düzenli ifadelerde kullanılan bakınma sembolleri aşadaki gibidir:
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
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 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.
"/.at(.)?$/" => The fat cat sat on the mat.
"/.at(.)?$/gm" => The fat cat sat on the mat.
Varsayılan olarak, bir düzenli ifade açgözlü bir eşleştirme yapacaktır, bu da eşleşmenin mümkün olduğu kadar çok olacağı anlamına gelir. Tembel bir şekilde eşleştirmek için ?
kullanabiliriz, bu da eşleşme olabildiğince kısa olacaktır.
"/(.*at)/" => The fat cat sat on the mat.
"/(.*?at)/" => The fat cat sat on the mat.
- Report issues
- Open pull request with improvements
- Spread the word
- Reach out to me directly at ziishaned@gmail.com or
MIT © Zeeshan Ahmad