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.