Karmaşık Düzenli İfadelerde Uzmanlaşma

Normal İfadeler (regex), desen eşleştirme ve metin işleme için çok yönlü araçlardır. Bu eğitimde, karmaşık metin işleme senaryolarını daha etkili bir şekilde yönetmenize yardımcı olan gelişmiş normal ifade teknikleri incelenmektedir.

İddiaların Arkasına Bakış

Geriye dönük iddialar, bir modeli ancak ondan önce başka bir model geliyorsa eşleştirmenize olanak tanır. Bu, bağlamı maça dahil etmeden sağlamak için kullanışlıdır.

  • Pozitif Geriye Bakış (?<=...): Yalnızca belirtilen ifadenin önünde olması durumunda desenle eşleşir.
  • Negatif Geriye Bakış (?<!...): Yalnızca belirtilen ifadenin önünde değilse desenle eşleşir.

Örnek:

(?<=Mr\.|Mrs\.)\s[A-Z]\w+

Bu normal ifade, önünde "Mr." veya "Mrs." bulunan adlarla eşleşir.

Koşullu Desenler

Koşullu kalıplar, belirli bir koşulun karşılanıp karşılanmadığına bağlı olarak farklı kalıpları eşleştirmenize olanak tanır. Sözdizimi (?(koşul)true-pattern|false-pattern) şeklindedir.

Örnek:

(\d{3}-)?\d{3}-\d{4}

Bu normal ifade, alan kodu olan veya olmayan telefon numaralarını eşleştirir.

Altprogramlar ve Özyineleme

Alt rutinler ve özyineleme, aynı normal ifade içindeki kalıpları yeniden kullanmanıza veya iç içe geçmiş yapılarla eşleşmenize olanak tanır. Bu özellikle karmaşık ve iç içe geçmiş veriler için kullanışlıdır.

Örnek:

(?<group>\((?>[^()]+|(?&group))*\))

Bu normal ifade, dengeli parantezleri iç içe düzeylerle eşleştirir.

İyelik Niceleyicileri

İyelik niceleyiciler, normal ifade motorunun geri izleme yapmasını engeller; bu, geri izlemenin gerçekleşmediğinden emin olmak istediğinizde performansı artırabilir.

Örnek:

\w++

Bu normal ifade, bir dizi kelime karakterini sahiplenilerek eşleştirir; bu, bir kez eşleştirildikten sonra karakterlerden vazgeçmeyeceği anlamına gelir.

Gelişmiş Eşleştirme için Bayrakları Kullanma

Regex bayrakları, kalıp eşleşmesinin davranışını değiştirir. Bazı yaygın bayraklar şunları içerir:

  • 'i': Büyük/küçük harfe duyarlı olmayan eşleştirme.
  • 'm': Çoklu satır modu, ^ ve $'in davranışını etkiler.
  • 's': Nokta modu, .'in yeni satır karakterleriyle eşleşmesine olanak tanır.
  • 'x': Okunabilirlik için boşlukları göz ardı edin ve kalıp içindeki yorumlara izin verin.

Örnek:

/pattern/imsx

Bu model, büyük/küçük harfe duyarlı olmayan, çok satırlı, noktalı ve genişletilmiş modları uygular.

Programlama Dillerinde Örnekler

Python ve JavaScript'te gelişmiş normal ifade kullanımına ilişkin bazı örnekler:

Python Örneği

import re

# Match a name preceded by Mr. or Mrs.
pattern = r'(?<=Mr\.|Mrs\.)\s[A-Z]\w+'
text = 'Mr. Smith and Mrs. Johnson'
matches = re.findall(pattern, text)

for match in matches:
    print('Match found:', match)

JavaScript Örneği

// Match a name preceded by Mr. or Mrs.
const pattern = /(?<=Mr\.|Mrs\.)\s[A-Z]\w+/g;
const text = 'Mr. Smith and Mrs. Johnson';
const matches = text.match(pattern);

if (matches) {
    matches.forEach(match => console.log('Match found:', match));
}

Çözüm

Geriye dönük iddialar, koşullu kalıplar, alt rutinler, özyineleme ve sahiplik niceleyicileri gibi gelişmiş normal ifade teknikleri, karmaşık metin işleme için normal ifadenin yeteneklerini genişletir. Bu kavramlara hakim olmak, karmaşık eşleştirme ve manipülasyon görevlerini daha yüksek verimlilik ve hassasiyetle yerine getirmenizi sağlar.