Gelişmiş Normal İfadelerin Gücünün Kilidini Açmak

Normal İfadeler (regex), kalıp eşleştirme ve metin işleme için güçlü araçlar sağlar. Bu makale, karmaşık metin işleme görevlerinin tam ve verimli bir şekilde üstesinden gelmenizi sağlayan gelişmiş normal ifade kavramlarını araştırıyor.

İleriye ve Geriye Bakış İddiaları

İleriye bakma ve arkaya bakma iddiaları, bir modeli yalnızca başka bir modelin öncesinde veya sonrasında olması durumunda eşleştirmenize olanak tanır. Maça dahil etmeden bağlamı sağlamak için kullanışlıdırlar.

  • Pozitif Bakış (?=...): Desenin yalnızca belirtilen ifade tarafından takip edilmesi durumunda eşleşmesini sağlar.
  • Negatif Bakış (?!...): Desenin yalnızca belirtilen ifade tarafından takip edilmemesi durumunda eşleşmesini sağlar.
  • Pozitif Geriye Bakış (?<=...): Desenin yalnızca belirtilen ifadenin önünde olması durumunda eşleşmesini sağlar.
  • Negatif Geriye Bakış (?<!...): Desenin yalnızca belirtilen ifadenin önünde olmaması durumunda eşleşmesini sağlar.

Örnek:

(?<=Mr\.\s|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}-)?(?(1)\d{3}-\d{4}|\d{7})

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.