WhatsApp

Regular Expressions (Düzenli İfadeler)

Düzenli ifadeler (Regular Expressions – RegEx), metin içerisinde belirli desenleri aramak, eşleştirmek ve değiştirmek için kullanılan güçlü bir araçtır. Programlama dillerinde ve metin işleme uygulamalarında yaygın olarak kullanılan bu yapı, özellikle veri doğrulama, metin ayrıştırma ve string manipülasyonu gibi işlemlerde büyük kolaylık sağlar. Bu rehberde, düzenli ifadelerin temel bileşenleri olan belirteçler (flags), özel karakterler (metacharacters), miktar belirteçleri (quantifiers), ileri ve geri bakma ifadeleri (lookaround), açgözlü ve tembel eşleşme (greedy vs. lazy matching) gibi konular ayrıntılı bir şekilde ele alınacaktır. Ayrıca, geri dönüş referansları (backreferences) ve isimlendirilmiş gruplar (named capturing groups) gibi gelişmiş teknikler de açıklanarak, düzenli ifadeleri daha verimli kullanabilmeniz için kapsamlı bir kaynak sunulacaktır.

Modifiers & Flags (Belirteçler veya Bayraklar)

FlagAnlamAçıklamaÖrnek
gGlobalTüm eşleşmeleri bulur, sadece ilkini değil./cat/g ifadesi “cat cat cat” dizisindeki tüm “cat” kelimeleriyle eşleşir.
iCase InsensitiveBüyük/küçük harf farkını göz ardı ederek eşleşme yapar./hello/i ifadesi “Hello”, “HELLO”, “hElLo” ile eşleşir.
mMultiline^ ve $ işaretlerinin her satırın başı ve sonu için çalışmasını sağlar./^hello/m ifadesi “hello\nhello” içinde her iki “hello” kelimesini de eşleştirir.
sDot All. (nokta) normalde yeni satır (\n) karakteriyle eşleşmez, ancak bu flag ile eşleşir./a.b/s ifadesi “a\nb” ile eşleşir.
uUnicodeUnicode karakterlerini düzgün işleyerek eşleşme yapar. (ö,ş,ü,ğ vb.)/\u{1F600}/u ifadesi “😀” (gülen yüz emojisi) ile eşleşir.
yStickyAramayı belirli bir konumdan başlatır ve eşleşme olmazsa devam etmez.const regex = /hello/y; regex.lastIndex = 6; regex.test(“hello hello”) sadece 6. karakterden sonra “hello” bulursa eşleşir.
dHas Indices Eşleşmenin dizinlerini bir dizi olarak döndürür./test/d.exec(“This is a test”) ifadesi [index: 10] ile “test” kelimesinin başlangıç konumunu döndürür.

Bu flag’ler birleştirilerek kullanılabilir. Örneğin:

/hello/gi → “Hello hello HELLO” dizisindeki tüm “hello” kelimeleri ile büyük/küçük harf fark etmeksizin eşleşir.

Metacharacters (Özel Anlam İçeren Karakterler)

MetaAnlamAçıklamaÖrnek
|OR (alternation) – Pipe Signİki veya daha fazla seçenek arasında seçim yapar./cat|dog|fish/ ifadesi cat, dog ve fish ile eşleşir.
.Any Character (Wildcard) – Dot SignYeni satır (\n) hariç herhangi bir karakterle eşleşir./c.t/ ifadesi “cat”, “cot”, “cut” gibi kelimelerle eşleşir.
^Start of String – Caret Sign  Dizginin başında belirtilen deseni arar./^hello/ ifadesi “hello world” ile eşleşir ama “world hello” ile eşleşmez.  
$End of String – Dollar SignDizginin sonunda belirtilen deseni arar./world$/ ifadesi “hello world” ile eşleşir ama “world hello” ile eşleşmez.
\dDigitBir rakam (0-9) ile eşleşir./\d+/ ifadesi “abc123” içinde “123” ile eşleşir.
\DNon-DigitRakam olmayan karakterlerle eşleşir./\D+/ ifadesi “abc123” içinde “abc” ile eşleşir.
\wWord CharacterHarf, rakam veya alt çizgi ([a-zA-Z0-9_]) ile eşleşir./\w+/ ifadesi “hello_world123” ile eşleşir.
\WNon-Word CharacterHarf, rakam ve alt çizgi dışında kalan karakterlerle eşleşir./\W+/ ifadesi “hello world!” içinde ” ” ve “!” ile eşleşir.
\sWhitespaceBoşluk karakterleri (space, tab, newline) ile eşleşir./\s+/ ifadesi “hello world” içinde boşluk karakteriyle eşleşir.
\SNon-WhitespaceBoşluk olmayan karakterlerle eşleşir./\S+/ ifadesi “hello world” içinde “hello” ve “world” ile eşleşir.
\bWord BoundaryKelimenin başını veya sonunu belirtir./\bcat\b/ ifadesi “cat” kelimesiyle eşleşir ama “category” ile eşleşmez.
\BNon-Word BoundaryKelimenin içinde bulunan deseni arar./\Bcat\B/ ifadesi “category” içinde “cat” ile eşleşir ama “cat” kelimesiyle eşleşmez.
\uxxxxUnicodeUnicode karakterlerini temsil eder. XXXX, 16 bitlik Unicode kodunu ifade eder.\u00E7 ifadesi “ç” karakterine karşılık gelir. “çare” kelimesindeki “ç” harfi ile eşleşir.
()Grouping (Parantheses)Belirtilen ifadeyi grup olarak işler./(ab)+/ ifadesi “abab” içinde “ab” grubuyla eşleşir.
[]Character Set (Bracket)Köşeli parantez içindeki karakterlerden herhangi biriyle eşleşir./[aeiou]/ ifadesi “apple” içinde “a”, “e” ile eşleşir.
[^]Negated Character SetKöşeli parantez içindeki karakterler dışındaki karakterlerle eşleşir./[^aeiou]/ ifadesi “hello” içinde “h”, “l”, “l” ile eşleşir.

Quanfiers (Miktar Belirteçleri)

BelirteçAnlamAçıklamaÖrnek
+One or More – 1 veya daha fazlaÖnceki karakterin en az bir kez tekrar etmesi durumunda eşleşir.“a+” ifadesi “a”, “aa”, “aaa” gibi en az bir a içeren dizelerle eşleşir, ancak “b” ile eşleşmez.
*Zero or More – hiç veya daha fazlaÖnceki karakterin hiç veya daha fazla kez tekrarlanması durumunda eşleşir.“a*” ifadesi “”, “a”, “aa”, “aaa” gibi herhangi bir sayıda a içeren (veya hiç içermeyen) dizelerle eşleşir.
?Optional (Zero or One)Önceki karakterin hiç olmaması veya bir kez bulunması durumunda eşleşir.“colou?r” ifadesi “color” ve “colour” kelimeleriyle eşleşir.
\Escape CharacterÖzel karakterleri kaçış karakteriyle kullanmaya yarar./\./ ifadesi “hello.world” içinde “.” karakteriyle eşleşir.
{n}Exact Count – Bire bir aynın kez tekrar eden karakterlerle eşleşir.“a{3}” ifadesi “aaa” ile eşleşir ama “aa” veya “aaaa” ile eşleşmez.
{n,m}Range – Aralıkn ile m arasında tekrar eden karakterlerle eşleşir.“a{2,5}” ifadesi “aa”, “aaa”, “aaaa”, “aaaaa” ile eşleşir ama “a” veya “aaaaaa” ile eşleşmez.
{n,}At Least n – En az nEn az n kez tekrar eden karakterlerle eşleşir.“a{3,}” ifadesi “aaa”, “aaaa”, “aaaaaa” gibi en az 3 a içeren dizelerle eşleşir ama “aa” ile eşleşmez.

Regular Expressions Patterns (Düzenli İfade Kalıpları)

İfadeAçıklamaÖrnek
[abc]a, b veya c karakterlerinden biriyle eşleşir./[abc]/ → “apple” a (ilk bulunan a)
[^abc]a, b veya c dışındaki herhangi bir karakterle eşleşir./[^abc]/ → “hello” h (ilk a, b, c olmayan karakter)
[a-z]Küçük harflerle (a ile z arasındaki herhangi bir karakter) eşleşir./[a-z]/ → “Hello” e, l, l, o
[A-z]A-Z ve a-z arasındaki ASCII karakterlerle eşleşir. Ancak bazı özel karakterleri de kapsar! (örn: [, \, ], _)/[A-z]/ → “Test_123” T, e, s, t, _
[A-Z]Büyük harflerle (A ile Z arasındaki herhangi bir karakter) eşleşir./[A-Z]/ → “Hello” H
[123]1, 2 veya 3 karakterlerinden biriyle eşleşir./[123]/ → “hello2world” 2
[0-5]0 ile 5 arasındaki rakamlarla eşleşir./[0-5]/ → “The number is 429” 4, 2
[0-9]Herhangi bir rakam (0 ile 9 arasındaki herhangi bir karakter) ile eşleşir./[0-9]/ → “My phone is 987654” 9, 8, 7, 6, 5, 4

Lookaround (Öngörme)

KullanımAnlamAçıklamaÖrnek
(?=)Positive Lookahead (İleriye Bakma)Belirli bir desenin devamında belirli bir şeyin olması gerektiğini kontrol eder.“\w+(?=@gmail\.com)” ifadesi “[email protected]” içinde “ali” ile eşleşir. Ancak “[email protected]” eşleşmez.
(?!) Negative Lookahead (İleriye Bakma)Belirli bir desenin devamında belirli bir şeyin olmaması gerektiğini kontrol eder.\w+(?!@gmail\.com) ifadesi “[email protected]” içinde “ali” ile eşleşir, ancak “[email protected]” eşleşmez.
(?<=)Positive Lookbehind (Geriye Bakma)Belirli bir desenin öncesinde belirli bir şeyin olup olmadığını kontrol eder.“(?<=\$)\d+” ifadesi “$100” içinde “100” ile eşleşir, çünkü öncesinde $ sembolü var.
(?<!)Negative Lookbehind (Geriye Bakma)Belirli bir desenin öncesinde belirli bir şeyin olmaması gerektiğini kontrol eder.“(?<!\$)\d+” ifadesi “$100 200” içinde “200” ile eşleşir, ancak “100” eşleşmez (çünkü $ sembolüyle başlamış).

Greedy Matching (Açgözlü Eşleşme)

Bir desenin mümkün olduğunca uzun bir eşleşme yapmasına izin verir.

Kullanım Formatı

/n.*m/ ifadesinde n karakteri ile satırdaki son m karakteri arasındaki tüm karakterleri eşleştirir.

/<a.*>/ ifadesi, “<a href=’url’>Link</a>” gibi metinlerle eşleşir ve tüm metni <a … > etiketini kapsar.

Lazy Matching (Tembel Eşleşme)

Bir desenin mümkün olduğunca kısa bir eşleşme yapmasına izin verir.

Kullanım Formatı

/n.*?m/ ifadesinde n karakteri ile ilk bulunan m karakteri arasındaki tüm karakterleri eşleştirir.

/<a.*?>/ ifadesi, aynı metni sadece ilk <a> etiketini eşleştirir.

Backreferences (Geri Dönüşler)

Backreference’ler, daha önce tanımlanmış bir grup ile eşleşen metni tekrar kullanmanıza olanak tanır. Bu, bir grup eşleşmesinin ardından aynı metni tekrar aramak için kullanılır.

Kullanım Formatı

\n, burada n, grup numarasını temsil eder.

(\w+)\s+\1 Bu ifade, aynı kelimenin iki kez ardışık olarak geçtiği durumlarla eşleşir. İlk grup (\w+) bir kelimeyi yakalar ve \1 aynı kelimenin tekrarını arar.

• “hello hello” → Eşleşir.

• “hello world” → Eşleşmez.

Naming Capturing Groups (Grup İsimlendirmesi)

Regex’te grup isimlendirme (Named Capturing Groups), parantez içine alınan bir gruba özel bir ad vermek için kullanılır. Bu sayede, eşleşen bölümü ismiyle çağırabiliriz, bu da regex ifadelerini daha okunabilir ve yönetilebilir hale getirir.

Kullanım Formatı

İsimlendirilmiş gruplar (?<grup_adi>…) veya (?’grup_adi’…) şeklinde tanımlanır.

/(?<isim>\w+) (?<soyisim>\w+)/

Non-Capturing Groups (Yakalamayan Gruplar)

Bir grup eşleşmesini yapmak ama o grubu yakalamamak için kullanılır. Bu, gereksiz gruplardan kaçınmanıza yardımcı olur.

Kullanım Formatı

(?:…) şeklinde tanımlanır.  Bu tür gruplar sadece deseni gruplayarak eşleşmeye yardımcı olur, ancak yakalanan değeri geri döndürmez.

(?:\d{2})-\d{2}-\d{2} Bu ifade, formatı XX-XX-XX olan tarihleri eşleştirir. (?:\d{2}) kısmı ilk iki basamağı gruplar ama yakalamaz. Diğer iki basamağı ise eşleşme için kullanır.

• “12-34-56” → Eşleşir.

• “123-45-67” → Eşleşmez, çünkü ilk iki basamağın sadece iki haneli olması gerekiyor.

Posted in Yazılım Dünyasında Genel Bakış
Write a comment