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.