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 2

Herhangi bir rakam ya da harf

/a[0123456789]b/
böyle bir kodu daha önceden öğrenmiştik. a ile başlayıp ardından bir rakam ve ardından b. Bunu ifade etmemin birbaşka yolu

/a[0-9]b/
dir. [0-9] ifadesi 0 dan 9 a kadar rakamlardan herhangi biri demektir. Aynı şekilde
[a-z] ile küçük harfleri, [A-Z] ile de büyük harfleri ifade ederiz. Dikkat Yalnızca İngilizce harfler geçerlidir.

/[a-z][a-z]/
küçük harfli, 2 harfli herhangi bir kelimeyi ifade eder.

/[0-9a-zA-Z]/ 
bir karakterlik büyük ya da küçük harf yada rakamdan oluşur.

/\$[A-Za-z][_0-9a-zA-Z]*/
ifadesi perlde değişken tanımını ifade eder. $ ile başlar 2. karakter bir harf olmak zorunda, sonraki gelenler ise _ , rakam ya da harften 0 ya daha fazla.

^ ve $ karakterleri

Aradığımız satırın başlangıç ve bitiş kısımlarını ifade etmek için kullanılır. ^ başlangıç, $ bitiş karakteri tanımlaması içindir


/^abc/
abc ile başlayan satırı ifade eder.

/dir$/
sonu dir ile biten satırı tarif eder.

/^bugün$/ 
yalnızca bugün kelimesini ifade eder.
daha önceki perl değişken tanımlaması yetersiz kalmıştı şimdi

/^\$[A-Za-z][_0-9a-zA-Z]*$/
ile başlangıç ve bitiş karakterlerini sabitlemiş oluk.

\b ve \B karakterleri

Kelime sınırlarını ve içini tanımlamak için kullanılır

/\bgöz/
göz ile başlayan kelimeleri ifade eder. göz , gözlük gözlükçü gibi. sugözü kelimesinde bu ifadeyle aratacak olursak olmadığını söyler.
\b yi kelimenin sonunu tanımlamak için de kullanabiliriz.

/göz\b/
göz ile biten kelimeler. paragöz , açıkgöz, karagöz gibi.

/\bgöz\b/
yalnızca göz kelimesini ifade eder.
\B karakteri ise kelimenin bulunduğu yerin kelime içi olduğunu gösterir kelime başı ve sonu değil. \b nin tersi.

/\Bgöz/
karagöz , elagöz ... yalnız göz olamaz.

/göz\B/
gözlük , gözlükçü , gözcü ... yalnız göz olamaz.

/\Bgöz\B/
içinde göz geçen kelimeler: karagözcü , elagözlü ...gibi. göz , gözcü , akgöz gibi kelimeler kabul edilmez.

Örnek:
$metin = "sen seni bil, sen seni, sen seni bilmezsen, patlatırlar enseni";
@kelimeler = split(/ /,$metin);
foreach $klm (@kelimeler){
if ($klm =~ /\bsen/){
  $say1++;
 }
if ($klm =~ /sen/){
  $say2++;
 }
}
print "sen ile başlayan $say1 kelime var.\n";
print "içinde sen olan $say2 kelime var.";

Sonuç:
sen ile başlayan 6 kelime var.
içinde sen olan 8 kelime var.

Alternatiflerin dışındakiler

/g[üö]z/
ifadesi göz veya güz kelimelerini ifade eder

/g[^üö]z/
ifadesinde ise alternatif harfler olan ü ve ö nün dışındakileri tamsil eder. Yani 1. harfi g , 2. harfi ü ve ö nün dışında birşey 3. harf ise z.

Karakter aralığı

/[0-9]/ un herhangi bir rakama denk geldiğini öğrenmiştik bunu yerine /\d/ kullanacak olursak aynı işi görür.
Karakter aralığı tablosu
İfadeTanımlamaAralık
\dBir rakam[0-9]
\DRakam dışında bir karakter[^0-9]
\wKelime oluşturan karakterler[_0-9a-zA-Z]
\WKelime oluşturmayanlar[^_0-9a-zA-Z]
\sHerhangi boşluk: Satır sonu, satır atla, tab gibi[ \r\t\n\f]
\SBoşluklar dışında kalanlar[^ \r\t\n\f]

/[\da-z]/
herhangi bir rakam ya da küçük harf

Herhangi bir karakter

(.) nokta karakteri enter karakteri hariç herhangi bir karakteri ifade eder.

/a.c/
a ile başlayıp c ile biten 3 karakterli kelimeleri ifade eder.

/a.*c/
a ile başlayıp c ile biten herhangi bir yazı.

/C.*l.*t.*ık/
ifadesine uygun bir kelime : Cebelitarık

Olanların sayısı

+ ile 1 yada daha fazlasını, ? ile de 0 ya da 1 tanesini ifade ediyorduk. Bazen tekrar edenin kaç tane olduğunu belirlemek gerekebilir. Bunu { ve } karakterleri arasında bir rakam ile belirleriz.

/ab{1,3}c/
ile abc abbc abbbc kelimelerine uyan bir ifade yazmış olduk. ab abbbbc kelimeleri buna uymayacaktır. Yani b nin1 den 3 e kadar tekrarını tarif ettik.

/ab{3}c/
yalnızca abbbc yi tarif eder.

/ab{3,}c/
b için alt tekrar sınırı 3 , üstsınır verilmemiş. a ile başlayan En az 3 b ile devam edip c ile biten manasında.
/a{0,3}c/
a ile başlar b 3 den fazla değil ve c

/[a-z]{1,3}/ 
1 , 2 ya da 3 harfli kelime

/.{3}/ 
herhangi 3 karakterden oluşan kelime

Seçenek belirleme

karakteri ile 1 ya da daha fazla seçenek belirlenebilir.

/aliveli/
ali ya da veli den biri

/[a-z]+[0-9]+/ 
1 veya daha fazla küçük harf veya 1 ya da daha fazla rakam

Hafızaya alma

Örneğin şu şekilde vir ifade kullanmak istiyoruz - 1 ya da daha fazla rakam ya da küçük harf -> [\da-z]+ - sonra noktalı virgül ya da iki nokta -> [;:] - sonra yine 1 ya da daha fazla rakam ya da küçük harf -> [\da-z]+ - sonra noktalı virgül ya da iki nokta -> [;:] - sonra yine 1 ya da daha fazla rakam ya da küçük harf -> [\da-z]+
/Şimdi kodları birleştirelim

/[\da-z]+[:;][\da-z]+[:;][\da-z]+/ 
Gördüğünüz gibi tekrar eden ifadeler var. Perlde tekrar eden ifadeler için bir kolaylık var. İfade parentez içine alınır

([\da-z]+)
perl parantez içi ifadeyi hafızaya alır. İfade içinde bunu tekrar kullanmak istersek \n kullanarak çağırırız. n yerine hafızaya alınmış ifadelerden kaçıncısı olduğunu yazarız.

/([\da-z]+])[:;]\1[:;]\1/ 
perl \1 kodunu gördüğü yere hafızaya alınmış [\da-z]+ kodlarını ekleyecektir. Diğer tekrar edene de aynı yöntemi uygulayacak olursak

/([\da-z]+)([:;])\1\2\1/
Gördüğünüz gibi hem kod kısaldı hem de karmaşadan kurtuldu. Tarih formatında (29-06-01 gibi) bir text aratmak istersek

/(\d{2})([/-:\.])\1\2\1/
kullanabiliriz. Yalnız dikkat 28-06:01 gibi yazılmış bir kodu da bulacaktır.
Devamı: Perl'de Regular Expressionlar 3

Hiç yorum yok:

Yorum Gönder

Related Posts Plugin for WordPress, Blogger...