Dizgiler, değişmez dizilerden ve karakter sınıflarından oluşur. Dizgiler, parantez içine alınmış dizgiler olan alt dizgiler içerebilir.
Dizgilerde olduğu gibi karakter sınıflarında da bazı karakterlerin özel bir anlamı vardır. Bu karakterlerden herhangi birini tam anlamıyla eşleştirmek için düzenli ifade yazılımının bu tür karakterleri gerçek anlamlarında yorumlaması gerektiğini bilmesini sağlamak amacıyla bunların imlenmesi veya kaçırılması gerekir.
Bu, karakterin başına ters eğik çizgi (\) getirilerek yapılır.
Düzenli ifade yazılımı, bağlamda herhangi bir özel anlamı olmayan bir karakterden kaçmayı sessizce yok sayar; bu nedenle, örneğin bir “j” (\j) karakterinden kaçmak güvenlidir. Bir karakterin özel bir anlamı olup olmadığından kuşkunuz varsa onu güvenle kaçırabilirsiniz.
Kaçış, elbette ters eğik çizgi karakterinin kendisini de içerir, böyle bir dizinin tam anlamıyla eşleşmesi için \\ yazarsınız.
Bir karakter sınıfı, tanımlanmış bir karakter kümesinden biriyle eşleşen bir ifadedir. Düzenli ifadelerde karakter sınıfları, sınıfın yasal karakterlerini [] köşeli parantez içine alarak veya aşağıda açıklanan kısaltılmış sınıflardan birini kullanarak tanımlanır.
Basit karakter sınıfları yalnızca bir veya daha çok düz karakter içerir; örneğin, [abc] (“a”, “b” veya “c” harflerinden biriyle eşleşir) veya [0123456789] (herhangi bir rakamla eşleşir).
Harfler ve rakamlar mantıksal bir sıraya sahip olduğundan, erimlerini belirterek bunları kısaltabilirsiniz: [a-c], [abc]’ye ve [0-9] ise [0123456789]’a eşittir. Bu yapıları birleştirerek; örneğin [a-fynot1-38] gibi tümüyle geçerli bir yapı oluşturabilirsiniz (sonuncusu, elbette “a”,“b”,“c”,“d”, “e”,“f”,“y”,“n”,“o”,“t”, “1”,“2”,“3” veya “8” ögelerinden biriyle eşleşecektir).
BÜYÜK harfler, BÜYÜK harf olmayan karşılıklarından farklı karakterler olduğundan, “a” veya “b” ile eşleşen ve BÜYÜK/küçük harf duyarsız bir karakter sınıfı oluşturmak için her durumda, onu [aAbB] olarak yazmanız gerekir.
Elbette “herhangi bir şeyin dışındaki her şeyle” eşleşen bir “negatif” sınıf oluşturmak olanaklıdır. Bunu yapmak için sınıfın başına bir şapka (^) koyun:
[^abc], “a”, “b” veya “c” dışındaki herhangi bir karakterler eşleşir.
Gerçek karakterlerin yanı sıra bazı kısaltmalar da tanımlanmış olup bu da işimizi biraz daha kolaylaştırmaktadır:
\aBu, ASCII zil karakteriyle (BEL, 0x07) eşleşir.
\fBu, ASCII form besleme karakteriyle (FF, 0x0C) eşleşir.
\nBu, ASCII satır besleme karakteriyle (LF, 0x0A, Unix yenisatır) eşleşir.
\rBu, ASCII satır başı karakteriyle (CR, 0x0D) eşleşir.
\tBu, ASCII yatay sekme karakteriyle (HT, 0x09) eşleşir.
\vBu, ASCII dikey sekme karakteriyle (VT, 0x0B) eşleşir.
\xhhhhBu, onaltılık hhhh Unicode karakteriyle eşleşir (0x0000 ve 0xFFFF arasında). \0ooo (başka bir deyişle, \zero ooo), ooo sekizlik ASCII/Latin-1 karakteriyle eşleşir (0 ve 0377).
.(nokta)Bu, herhangi bir karakterle eşleşir (yenisatır içerilir).
\dBu, bir rakamla eşleşir.
[0-9]ile aynıdır\DBu, rakam olmayan bir şeyle eşleşir.
[^0-9]veya[^\d]ile aynıdır\sBu, boşluk karakteriyle eşleşir.
[ \t\n\r]ile aynı şeydir\SBu, boşluk olmayan bir karakterle eşleşir.
[^ \t\r\n]ve[^\s]ile aynıdır\wHerhangi bir “sözcük karakteriyle” eşleşir; bu durumda bu bir harf, rakam veya alt çizgi olabilir.
[a-zA-Z0-9_]ile aynıdır\WBu, sözcük karakteri olmayan herhangi bir karakterler eşleşir; bu durumda bu harfler, sayılar ve alt çizgi dışındaki her şey olabilir.
[^a-zA-Z0-9_]veya[^\w]ile aynıdır
Sınıfların POSIX biçimine simgelemi, [:<class name>:] de ayrıca desteklenir. Örneğin, [:digit:], \d’e ve [:space:] de \s’e eşittir. POSIX karakter sınıflarının tam listesine buradan bakabilirsiniz.
Kısaltılmış sınıflar özel bir sınıfın içine yerleştirilebilir; örneğin bir sözcük karakteriyle, bir boşlukla veya bir noktayla eşleştirmek için [\w \.] yazabilirsiniz
Aşağıdaki karakterlerin “[]” karakter sınıfı yapısında özel bir anlamı vardır ve bir sınıfa sözcüğün tam anlamıyla içerilebilmesi için kaçış karakterlerinin kullanılması gerekir:
]Karakter sınıfını sonlandırır. Sınıftaki ilk karakter olmadığı sürece kaçırılmalıdır (kaçırılmamış bir şapka işaretinden sonra gelebilir).
^(şapka)İlk karakter ise negatif sınıfı belirtir. Sınıfın ilk karakteri ise sözcüğün tam anlamıyla eşleşecek biçimde kaçırılmalıdır.
-(tire)Mantıksal bir erimi belirtir. Bir karakter sınıfı içinde her zaman kaçırılmalıdır.
\(ters eğik çizgi)Kaçış karakteri. Her zaman kaçırılmalıdır.
Bir dizi alternatif dizgiden birini eşleştirmek istiyorsanız bunları | (dikey çubuk karakteri) ile ayırabilirsiniz.
Örneğin “John” veya “Harry” bulmak istediğinizde John|Harry düzenli ifadesini kullanırsınız.
Alt dizgiler, parantez içine alınmış dizgilerdir ve düzenli ifadeler dünyasında çeşitli kullanımları vardır.
Bir dizi alternatifi daha büyük bir dizgi içinde gruplandırmak için bir alt dizgi kullanabilirsiniz. Alternatifler “|” (dikey çubuk) karakteriyle ayrılır.
Örneğin, “int”, “float” veya “double” sözcüklerinden biriyle eşleşmek için int|float|double dizgisini kullanabilirsiniz. Yalnızca bir boşluk ve ardından birkaç harf gelen bir tanesini bulmak istiyorsanız alternatifleri bir alt dizginin içine yerleştirin: (int|float|double)\s+\w+.
Geriye başvuru kullanmak istiyorsanız dizginin istenilen kısmının anımsanması için (DİZGİ) alt dizgisini kullanın. Alt dizginin anımsanmasını önlemek için yakalamayan bir (?:DİZGİ) grubu kullanın.
Örneğin, aynı sözcüğün virgülle ve büyük olasılıkla bir miktar boşlukla ayrılmış iki örneğini bulmak istiyorsanız (\w+),\s*\1 yazabilirsiniz. \w+ alt dizgisi bir sözcük karakterleri parçası bulur ve ifadenin tümü onlardan sonra bir virgül, 0 veya birden çok boşluk ve aynı miktarda sözcük karakteri geliyorsa eşleşir. (\1 dizisi, paranteze alınmış ilk alt dizgiye başvurur.)
Not
\1 kullanımı ile ilgili anlatım bozukluklarını önlemek için ardına birkaç rakam koyun (örneğin \12, 12. alt dizgi veya 2 içeren ilk alt dizgi olabilir); birden çok rakamlı alt dizgiler için biz \{12} kullanıyoruz.
Örnekler:
\{12}1, “12 alt dizgisini kullan” anlamına gelir\123, “yakalama 1’i kullan, sonrasında 23’ü normal metin olarak kullan” anlamına gelir
Bir ileri sav, ya ?= ya da ?! ile başlayan bir alt dizgidir.
“Bill” dizisi ile yalnızca ardından “ Gates” gelmiyorsa eşleşmek istiyorsanız şu ifadeyi kullanabilirsiniz: Bill(?! Gates). (Bu, hem “Bill Clinton”’u hem de “Billy the kid”’i bulur; ancak diğer eşleşmeleri sessizce yok sayar.)
Savlar için kullanılan alt dizgiler yakalanmaz.
Ayrıca Savlar bölümüne bakın.
Bir arkaya sav, ya ?<= ya da ?<! ile başlayan bir alt dizgidir.
Arka sav, ileri sav ile aynı etkiye sahiptir; ancak geriye doğru çalışır. Örneğin, “fruit” gerçek dizisiyle yalnızca önünde “grape” yoksa eşleşmek istiyorsanız (?<!grape)fruit ifadesini kullanabilirsiniz.
Savlar için kullanılan alt dizgiler yakalanmaz.
Ayrıca Savlar bölümüne bakın
Aşağıdaki karakterlerin bir dizgi içinde anlamı vardır ve bunları tam anlamıyla eşleştirmek istiyorsanız kaçış karakterlerinin kullanılması gerekir:
\(ters eğik çizgi)Kaçış karakteri.
^(şapka)Dizinin başını bildirir.
$Dizinin sonunu bildirir.
()(sol ve sağ parantez)Alt dizgileri bildirir.
{}(sol ve sağ süslü ayraçlar)Sayısal niceleyicileri bildirir.
[](sol ve sağ köşeli ayraçlar)Karakter sınıflarını bildirir.
|(dikey çubuk)Mantıksal OR. Alternatifleri ayırır.
+(artı işareti)Niceleyici, 1 veya daha çok.
*(yıldız işareti)Niceleyici, 0 veya daha çok.
?(soru işareti)İsteğe bağlı bir karakter. Bir niceleyici olarak yorumlanabilir, 0 veya 1.