• Günlük Haberler
  • *İNSAN KAYNAKLARI
  • BİLİŞİM
  • e-TİCARET
  • Giriş
  • Kayıt
26 °c
Istanbul
26 ° Sal
26 ° Çar
26 ° Per
26 ° Cum
Türk İnternet
  • Ana Sayfa
  • BİLİŞİM
  • e-TİCARET
  • INTERNET
  • TELEKOM
  • YENİ TEKNOLOJİLER
  • Hakkımızda
No Result
View All Result
  • Ana Sayfa
  • BİLİŞİM
  • e-TİCARET
  • INTERNET
  • TELEKOM
  • YENİ TEKNOLOJİLER
  • Hakkımızda
No Result
View All Result
Türk İnternet
No Result
View All Result

Perl Programlama – 2

Perl Yazı dizimize devam ediyoruz. Bu yazı dizisinde Perl'de arama fonksiyonun işlemesi inceleniyor. Farklı arama tarzları gösteriliyor.

Jonathan Eisenzopf-Jonathan Eisenzopf
17 Eylül 2001
-Genel
0
Facebook'ta PaylaşTwitter'da PaylaşLinkedin'de Paylaş

Bu yazıda 2 tür ifade göstereceğiz. İlki eşitlik/benzerlik (match) operatörü, ikincisi arama ve değiştirme operatörü (search/replace). Eşitlik/benzerlik operatörü iki slash arasında kullanılır. Bu slash’ların önünde “m” yer alır.

m/ifade/

Çoğu programcı bu öndeki m ‘i kullanmaz. Çünkü Perl Perl 2 tane slash gördüğünde onun bir ifade gösterdiğini bilir. Örnek verelim, bir dosyada ismimi arıyorsak, kod’un şöyle olması gerekir.

my $counter = 0;
while (<>) {
$counter++ if m/Jonathan/gi;
print "Found 2001 $counter timesn";}

Eğer bu script’in belli bir dosya içinde arama yapmasını istiyorsak, dosyanın adını vermemiz lazım. Bunu yönlendirme operatörü olan < ile yaparız.

match.pl < index.html

Bu script index.html dosyasındaki her satırı okuyarak adımı araştıracak ve iİsmimi bulduğu zaman $counter saydıracaktır. Script tüm satırları bitirdiğinde Jonathan adını kaç kere bulduğunu yazacaktır.

Tanmlamanın arkasında kullanılan iki karaketer vardır. (g ve i). Bunlara modifier denir. Özel bir anlamları vardır ve tanımın çalışma şeklini değiştirir. g modifier’I Perl’e herhangi bir yerde adımı bulsa bile aramaya devam etmesini söyler. Global Modifier olarak da adlandırılır. Aranan kelimeyi kaç kere bulursa bulsun, devam etmesini sağlar. Aksi takdirde kelimeyi ilk bulduğunda arama işlemi sona erecekti. İkinci modifier , i, Perl’e arama yapılırken büyük-küçük harf ayrımı yapmamasını söyler. Bu durumda başharfi büyük J olmayan bir JONATHAN bulsa bile sayılacaktır. Ya da adım tamamen büyük harfle yazılsa bile, bulmuş olacaktır.

Perl’ün normal ifadeleri, bize, kelimeleri, digitleri yada aralıkları temsil eden özel karakterler kullanmamıza da müsade eder. Bu karakter sınıflarını ters slash ve karakter olarak kullanılır. Alfanümerik karakterler için w, sayılar için d, boşluklar için s kullanılır. Alfanümerik karakterler a dan z’ye kadar harfleri ve 0 dan 9’a kadar rakamları temsil ederler. Bu özel karakter sınıfları, bir ifadeyi oluştururken, ifadeleri kısaltmamıza yardımcı olur. Mesela, insanlar bazen adımı Jonathan yerine Jon olarak kullanırlar. Bu durumda, eğer adım Jon olarak kullanılmışsa gözden kaçacaktır. O halde bunu da yakalamanın bir yolu olmalıdır. Yukarıdaki ifadeyi şöyle değiştirelim.

$counter++ if /Jon(wwwww)?/gi;

Şimdi, Jon ve ondan sonra 5 karakter arayacak bir ifade yazmış olduk. Burada yeni bir şey daha var, karakterler parantezlerle çevrişmiş durumda ve en sonunda bir soru işareti var. Soru işareti parantez içindeki sayıdaki kadar karakter bulmamızı yönetir ki bu nedenle “miktar belirleyici (qualifier)” olarak tanımlanır. Soru işareti, miktar belirleyici olarak doğru miktarı ya da yanlış miktarları bulmakta kullanılabilir. 2 başka miktar belirleyici vardır. + ve *. + ifadekinin 1 veya daha fazla olduğunu gösterir. * ise 0 ve daha çok olduğunu. Miktar belirleyici solundaki ifadeyi yönetir. Bizim örneğimizde, bu parantezin içindeki ifadedir. + Miktar belirleyicisini kullanmanın bir yolu şöyledir;

$counter++ if /Jon(w+)?/gi;

Yukarıdaki ifade, Jon ve Jon’a 1 ya da daha fazla karakter eklenmiş kelimeleri bulacaktır. Bunu * ile yazarsak.

$counter++ if /Jonw*/gi;

Miktar belirleyicisi, w karakterinden sonra yerleştirilmiş. Bu sadece Jon ya da arkasına bir kaç karakter eklenmiş kelimeleri bulacaktır. Ancak burada başka bir sorun var. Her iki yöntem, Jonathan dışında bir kelime de bulabilir. Karakterlerin tam sayısını belirleyecek yol şudur.

$counter++ if /Jon(w{5})?/gi;

Bununla Jon veya Jon+5 karakteri bulacaktır. Bu da tam istediğimiz sonucu vermeyebilir. İsim Jonothon olarak bulunabilir. Tam doğrusunu bulmak için, aradığımız karakterlerin kendisini belirtebiliriz.

$counter++ if /Jon(athan)?/gi;

Şimdi oldu. Şimdi ya Jon ya da Jonathan bulacak. Ancak bazen insanlar benim adımı farklı telafuz edip, sonunu AN yerine ON ile bitirebiliyorlar. Bu yanlış yazılmış isimleri de bulmak isteyeceğiz. Bu nedenle, bilinen karakter sınıflarını eklemmemiz gerekir. Yukarıdaki özel karakterler Perl’ün iç kullanımındaki sınıflar ama biz ayrıca ifade içinde, kelimenin içerdiği harfleri kullanabiliriz. Bu durumda köşeli parantezler kullanılır.

$counter++ if /Jon(ath[ao]n)?/gi;

Böylece yukarıdaki ifade, Jon, Jonathan ya da Jonathon’u bulacaktır. Gördüğünğz gibi ifadeler bize istediğimizi vermekte son derece esnek ve güçlü. Bu ifadeler düşündüğünğz herşeyi yapabilmenize olanak sağlıyor. Daha sonra sizlere XML ‘de yazılmış çok karmaşık bir ifadeyi göstereceğim.

Etiketler: BilgiWeb Geliştirme

Türk İnternet'ten buna benzer yazılar için bildirim almak ister misiniz?

ABONELİKTEN ÇIK
Lütfen yorum yapmak için giriş yapın.

GÜNLÜK BÜLTEN ABONELİĞİ

Aboneliğinizi onaylamak için gelen veya istenmeyen posta kutunuzu kontrol edin.

YAZARLARIMIZ

blank
Ernur Öktem
  • Tarhan : Kullanıcılara İstediğini Değil İhtiyacı Olanı Vermek Gerekir
blank
Fusun S.Nebil
  • FBI, 2022’de Amerikalı Kullanıcıların İnternet Dolandırıcılarına 10,3 Milyar $ Kaptırdığını Açıkladı (590’ı Türk)
blank
Innocenzo Genna* / EU telecom regulation expert
  • GDPR Kararı, Meta’nın Kişiselleştirilmiş Reklam İşini Zora Sokuyor
blank
Mehmet Taşnikli
  • Numarası Bilinen Android Telefonlar Hacklenebiliyor
blank
turk-internet.com / Bilgi
  • Stalkerware; Sadece Hackerlar Değil, Yakınlarınız da Cihazlarınıza Sızıyor

HAFTANIN ÖNE ÇIKANLARI

  • Baz İstasyonları Cinneti ve Enkaz Altında Kalmak
  • BTK, Haberleşme Sektörünü Depreme Hazırlamış mı?
  • Telefon Operatörlerimiz Depremde Ne Yaptılar? – II – Turkcell
  • BTK Sorumluluğu Operatörlere mi Yüklemeye Çalışıyor? – 1
  • Togg NFT Açık Arttırmasındaki Çökme ve Ertelemeler için Açıklama Yayınladı

HAFTANIN KELİMESİ

3GPP

3. Nesil Ortaklık Projesi (3GPP), dünya çapında çeşitli mobil (hücresel) ve telekomünikasyon standartlarını geliştiren ve sürdüren bir grup standart kuruluşudur.

3G ile birlikte kurulmuş ve telekom endüstrisinin Birleşmiş Milletleri diye tanımlanabilir. Sonraki nesiller için de standartları belirlemiştir.

Detayı için Wiki-Turk'e bakınız
blank

Bildirimler

Turk-internet.com masaüstü bildirimlerini almak için lütfen buraya tıklayın

Son Yorumlar

  • İngiliz Düzenleyici Ofcom, Bulut Servislerini ve Akıllı Cihaz Pazarını Soruşturuyor için Tolga Kaprol
  • Seçim Yaklaşırken, Kişisel Veriler Kötüye Nasıl Kullanılır? için [email protected]
  • Video Sunan Platformları En İyi Nasıl İzleriz? için Tolga Kaprol
  • Rusya, Meta’ya (Facebook) Erişimi Engelledi için Tolga Kaprol
  • Metaverse, Bir Can Simididir için tkaprol

Haber bültenimize abone olun

Aboneliğinizi onaylamak için gelen veya istenmeyen posta kutunuzu kontrol edin.

  • Haber İndeksi
  • Hakkımızda
  • Gizlilik Bildirimi
  • Firmaların turk-internet.com ile Çalışabilirlik Yöntemleri
  • Destek
  • Bize Yazın

© 2021 Turk-Internet.com

No Result
View All Result
  • Ana Sayfa
  • BİLİŞİM
  • e-TİCARET
  • INTERNET
  • TELEKOM
  • YENİ TEKNOLOJİLER
  • Hakkımızda

© 2021 Turk-Internet.com

Tekrar Hoşgeldiniz!

Aşağıdan hesabınıza giriş yapınız

Şifremi unuttum? Kayıt Ol

Yeni Hesap Oluştur

Kayıt olmak için aşağıdaki formu doldurunuz

Tüm alanların doldurulması gerekiyor. Giriş yap

Şifrenizi geri alın

Lütfen şifrenizi resetlemek için kullanıcı adı veya email adresinizi girin.

Giriş yap
Bu internet sitesinde, kullanıcı deneyimini geliştirmek ve internet sitesinin verimli çalışmasını sağlamak amacıyla çerezler kullanılmaktadır. Gizlilik Bildirimi.