Etiketler

AutoCAD (54) bedava (46) Resim (33) Dosya (32) program (21) Ziyaretçi Defteri (20) excel (18) Güncelleme (16) asgbookphp (16) Şablon (15) Qbasic (14) php (14) Eğitim (13) Nasıl yapılır (13) online (13) Freeware (12) PHP script (12) Fotoğraf (11) Kaynak kod (10) SolidWorks (10) Dos (9) Photoshop (9) VBA (9) Visual Basic (9) ürünler (9) E-book (8) tutorial (6) Ders (5) Word (5) Lisp (4) Programlama (4)

6 Ocak 2008 Pazar

Perl'de Regular Expressionlar 1

Perl'de Regular Expressionlar diye başlık attık.
Türkçe'si Düzenli İfadeler oluyor herhalde. Neyse burada önemli olan Türkçesi'nin ne olduğu değil perlde kullanımını öğrenmek.
Perl dilinin güçlü yanlarından biri de Regular Expressionlar.
Diğer programlama dillerinde çok sayıda kodla yapabileceğimiz işler perlde bu yöntemi kullanarak tek satırda bile halledilebiliyor.
Anlaşılır olması için örnekler vermeye çalıştım.
Örnekleri uygulamak için sisteminize Perl ve bir perl editör programı indirip kurun. Tavsiyem Perl Builder programı.
Detaylı bilgi için Perlde düzenli ifadeler genelde iki / işareti arasında olur. /def/ ifadesi sedefler kelimesinde aratıldığında sonuç True yani Doğru olacaktır. split fonksiyonu ile düzenli ifadeleri kullanabilir ve bir metni parçalara ayırabiliriz.

$metin = "Perl öğrenmek sanıldığı kadar zor değil";
@parcalar = split(/ /,$metin);

üstteki kodlar $metin değişkenindeki metni boşluklardan ayırırarak @parçalar boyutlu değişkenine aktarır. Dikkat: İki bölü arasında bir boşluk var

~ operatörü

~ operatörüyle metin içinde düzenli ifadeye uygun kelime olup olmadığı araştırılır.

$sonuc = $degisken =~ /abc/;
=~ operatörüyle $sonuç değişkenine kelime varsa, True yada 0 olmayan bir değer ; kelime yoksa, False ya da 0 değeri atanır.

$sonuc = $degisken !~ /abc/;
!~ operatörü metin içinde aranılan olmadığını tespit eder. Yoksa 1, varsa 0 sonucu alırız. Yani ilk kodun tersi.

$istek = "Bir çay istiyorum. Lütfen";
if ($istek =~ /Lütfen/){
print "Nezaketinize teşekkürler";}
else {
print "Nazik değilsiniz.";}

Düzenli İfadelerde Özel karakterler.

+ karakteri

Bir ya da daha fazla karakter olup olmadığını araştırır.
/Bi+r/
ifadesine uyan birkaç kelime : Bir Biir Biiiiiiiir

@kelimeler = split (/ /, $metin);
koduyla metini boşluk karakterlerinden bölerek kelimelere ayırmayı öğrenmiştik. Metinde fazladan konmuş boşluklar varsa kelime sayısı artacaktır

Bu  metinde fazladan  gereksiz boşluklar var.
metni boşluklarda kelimelere ayrıldığında

("Bu","","metinde","fazladan","","gereksiz","boşluklar","var.")
sonucunu elde ederiz. Bunu önlemek için

@kelimeler = split (/ +/, $metin);
kodunu uygulayabiliriz. Böylece fazladan konulmuş boşluklar dikkate alınmayacak onlar 1 taneymiş gibi değerlendirilecek.

("Bu","metinde","fazladan","gereksiz","boşluklar","var.")
Metindeki kelimelerin sayısını veren bir kod örneği:

$metin = "Bu  metinde fazladan  gereksiz     boşluklar var.";
@kelimeler = split(/ +/,$metin);
$kelimesay = @kelimeler;
print "Metinde $kelimesay kelime var.";

[ ] karakterleri

Alternatif karakterler grubu oluşturmak için kullanılır.

/a[bB]c/
üstteki ifadeye uygun kelime : abc veya aBc olacaktır

/A[0123456789]/
buna uygun olanlar ilk harfi A diğer harfi bir sayı olan kelimeler olacaktır.

/a[123]+b/
buradaki artı işareti grup içindekilerden birinin 1 ya da daha fazla tekrarını ifade eder. uygun kelimeler

a1111b
12b
a333b
Tab karakteri \t ve boşluk dan metni ayırmak için kullanılacak kod.

@kelimeler = split(/[\t ]+/, $metin);

* ve ? karakterleri

+ işareti 1 ya da daha fazla tekrarı ifade ediyordu. * ise 0 ya da daha fazla tekrarı ifade eder. yani hiç yoksa bile kabul edilir.

/ab*c/
bu koda uyan kelimeler : ab abc abbbc ...

/a[123]*b/
ise : ab , a1b , a222b , a3b ...
? karakteri ise belirtilen karakterin 0 ya da 1 defa olduğunu araştırır.

/ab?c/
ise : ac , abc olabilir ama abbc olamaz.
İfadelerde özel karekterleri kullanma
Evet *+?[] gibi özel karakterlerle arama ifademizi belirtiyoruz. Peki örneğin * karakterini arattırmak istersek ne yapacağız? Çünkü diğer karakterler gibi kullanacak olsak başka şeyi ifade eder. Bu tür karakterleri belirtmek için başına ters bölü işareti konur. \ işareti perl e ardından özel bir karakterin geldiğini söyler. Örnek

/a\*+b/
ise: a*b a***b ...
Akla şöyle bir soru gelebilir \ işaretini aratmak istersem? diye. Bunun için de aynı yöntemi kullanırız.

/a\\b/
ise: a\b
Eğer Perl5 kurulu ise özel karakterleri girmek için \Q ve \E karakterlerini de kullanabilirsiniz. \Q özel karakter tanımlama başlangıcını, \E de sonunu bildirir.

/\Q^ab*/ 
ise : ^ab*

/\Q^ab\E*/ 
ise: ^a ile başlayan 0 ya da daha fazla b den oluşur.

Hiç yorum yok:

Yorum Gönder

Related Posts Plugin for WordPress, Blogger...