Perl, düzenli ifadelerle çalışmak için en güçlü dillerden biridir. Eşleşme için =~ ve !~ operatörleri kullanılır.
Düzenli ifade modifikatörleri:
i — büyük/küçük harf durumu önemli değilg — global arama (tüm eşleşmeler)m — çok satırlı mod (her satır için ^ ve $ çalışır)s — nokta (.) yeni satır karakterini içerirÖrnek:
my $text = "My email: max@mail.com and ann@ya.ru."; while ($text =~ /([\w.]+@[\w.]+)/g) { print "Email: $1 "; }
Bu örnekte döngü, dizeden tüm e-postaları çıkarır.
Eşleşmeden sonra değerler özel değişkenlerde $1, $2, ... (her eşleşen grup için) tutulur.
Düzensiz ifade ile başarısız bir eşleşme sonrası $1 değişkeninde ne saklanır?
Cevap:
$1, başarısız bir eşleşme durumunda güncellenmez — son başarılı eşleşmenin değerini saklar. Bu potansiyel bir hata kaynağıdır! Bunu önlemek için karmaşık durumlarda$1,$2, ... açıkça temizlemek daha iyidir.
Hikaye
Giriş verilerinin doğrulanması karmaşık bir düzenli ifadeye bağlıydı ve
$1değerine dayanıyordu. Uygun bir dize bulamayan bir eşleşmeden sonra,$1değişmedi ve işlem eski, yanlış bir e-posta adresinden devam etti.
Hikaye
Programcı modifikatörde hata yaptı. Büyük bir metinde
/abc/gkullanarak çok satırlı modda olduğunu düşündü. Sonuç olarak desen, satır sonları ile gerekli dizeleri bulamadı;/abc/mskullanması gerekti.
Hikaye
Projede tüm eşleşmeleri bulmak için global bayrak
/gkullanılmadı. Sonuç olarak, betik sadece ilk eşleşmeyi çıkardı, oysa kullanıcı tam veri listesini bekliyordu.