Kitaplar / Yöntem Birimler ve Araçlar Kılavuzu / 5. Desen: düzenli ifadeler
5. Desen: düzenli ifadeler
Düzenli ifade (regex), aranan metnin biçimini tarif eden küçük bir dildir: “iki rakam, iki nokta, iki rakam” gibi. Desen birimi bunlarla doğrulama, arama, ayıklama ve değiştirme yapar.
program SiparişAyıklama
{ Desen birimi: düzenli ifadelerle doğrulama, ayıklama ve değiştirme. }
kullan Desen
sabit YAZI: metin = 'Sipariş #A-1042: 3 adet çay, 12 adet simit; iletişim: edaece@ornek.de, 0532 123 45 67'
değişken g: herhangi
başla
yaz('Sipariş no : ' + Bul(YAZI, '#[A-Z]-\d+'), 1)
yaz('Adetler : ' + Metin(BulHepsi(YAZI, '\d+ adet')), 1)
TümGruplar(YAZI, '(\d+) adet (\w+)') içindeki her g için
yaz(' ' + g[2] + ' × ' + g[1], 1)
yaz('E-posta : ' + Bul(YAZI, '[\w.]+@[\w.]+\.\w+'), 1)
yaz('Telefon mu : ' + Metin(TamEşleşir('0532 123 45 67', '0\d{3} \d{3} \d{2} \d{2}')), 1)
yaz('Gizlenmiş : ' + DesenDeğiştir(YAZI, '(\d{4}) \d{3} \d{2} (\d{2})', '$1 *** ** $2'), 1)
yaz('Parçalar : ' + Metin(DesenAyır('çay; simit ,peynir', '\s*[;,]\s*')), 1)
yaz('Harf ayrımı: ' + Metin(Eşleşir(YAZI, 'SİPARİŞ')) + ', "i" ile: ' + Metin(Eşleşir(YAZI, 'SİPARİŞ', 'i')), 1)
bitir.Sipariş no : #A-1042
Adetler : ['3 adet', '12 adet']
çay × 3
simit × 12
E-posta : edaece@ornek.de
Telefon mu : doğru
Gizlenmiş : Sipariş #A-1042: 3 adet çay, 12 adet simit; iletişim: edaece@ornek.de, 0532 *** ** 67
Parçalar : ['çay', 'simit', 'peynir']
Harf ayrımı: yanlış, "i" ile: doğruDesenleri tek tırnak içinde yazmanızı öneririz; tek tırnaklı metinlerde \ olduğu gibi kalır.
| Desen | Anlamı |
|---|---|
a, çay |
Kendisi |
. |
Satır sonu dışında herhangi bir karakter |
\d, \w, \s |
Rakam; harf, rakam ya da _; boşluk. Büyük harflisi tersidir (\D) |
[abc], [a-z], [^0-9] |
Kümedeki bir karakter; aralık; kümede olmayan |
x*, x+, x? |
Sıfır ya da çok; bir ya da çok; sıfır ya da bir |
x{3}, x{2,4}, x{2,} |
Tam 3; 2 ile 4 arası; en az 2 |
x*?, x+? |
Tembel: olabildiğince az |
(…), (?:…) |
Yakalayan grup; yakalamayan grup |
a\|b |
a ya da b |
^, $, \b |
Metnin başı; sonu; sözcük sınırı |
\., \(, \\ |
Özel karakterin kendisi |
\w Türkçe harfleri de kapsar. Son argüman olarak 'i' verilirse büyük/küçük harf ayrımı kalkar ve Türkçedeki dört i (İ I ı i) birbirine eş sayılır.
| Üye | Ne döndürür |
|---|---|
Eşleşir(metin, desen) |
Desen metnin bir yerinde geçiyor mu |
TamEşleşir(metin, desen) |
Metnin tamamı desene uyuyor mu (doğrulama için) |
Bul(metin, desen) |
İlk eşleşme ya da boş |
BulHepsi(metin, desen) |
Tüm eşleşmelerin listesi |
Gruplar(metin, desen) |
İlk eşleşme için [tamamı, 1. grup, 2. grup…] ya da boş |
TümGruplar(metin, desen) |
Her eşleşme için böyle bir liste |
DesenKonumu(metin, desen) |
İlk eşleşmenin başladığı karakter (yoksa 0) |
DesenDeğiştir(metin, desen, yeni) |
Tüm eşleşmeleri değiştirir; $1 grup, $0 eşleşmenin tamamı, $$ dolar işareti |
DesenAyır(metin, desen) |
Metni eşleşmelerden böler |
DesenKaçış(metin), DesenGeçerli(desen) |
Özel karakterleri etkisizleştirir; deseni denetler |
Birim kendi eşleştirme motorunu kullanır, bu yüzden her ortamda aynı sonucu verir. İleri/geri bakış ((?=…)) ve geri başvuru (\1) yoktur. İç içe tekrar içeren desenler ((a+)+) bazı metinlerde çok uzun sürebilir; birim böyle durumda programı kilitlemek yerine hatayla durdurur. Kullanıcının yazdığı metni desenin içine koyacaksanız önce DesenKaçış ile kaçışlamanız gerekir.