30 Ocak 2013 Çarşamba

Düzenli İfadeler (Regular Expressions) ile İleriye ve Geriye Bakma

Düzenli ifadelerde ileriye ve geriye bakma kabiliyeti çok lazım olan şeylerden birisi. Nasıl yapıldığını anlatan gördüğüm en iyi site burası.

Buradaki sorudan da anlaşıldığı gibi ileri ve geri bakma kabiliyeti bi-directional iterator kullanılmasını gerektiriyor.

İleriye Bakma
Peki bu yetenek neden lazım ? Şöyle bir örnek vereyim. Diyelim ki virgül ile biten sayıları arıyoruz, ancak virgül karakterinin arama sonucunda dönmesini istemiyoruz. Eğer ileri bakma yeteneği olmasaydı bu aramayı yapamazdık. Bu gibi durumlar için düzenli ifadelerdeki positive lookahead, negative lookahead, positive lookbehind ve negative lookbehind kabiliyeti kullanılıyor. Bu yeteneklere hepsine kısaca lookaround deniyor.

Lookahead için ? işareti, lookbehind içinse ?< işareti ile başlayan düzenli ifadeler kullanılır.

Positive Lookahead : İleriye bakarak verilen düzenli ifadeyle bittiğinin kontrol
Positive Lookahead yazısına taşıdım.

Negative Lookahead : İleriye bakarak verilen düzenli ifadeyle bitmediğinin kontrolü
Düzenli ifadeye (?! ile başlayan bir ek yapılır. RegEx to extract the first 6 to 10 digit number, excluding 8 digit numbers  örneğinde
ifadesi için negative lookahead kullanılmış.



Geriye Bakma

Negative LookBehind - Geriye bakarak verilen düzenli ifade ile başlamadığının kontrolü
Düzenli ifadeye  (?<! ile başlayan bir ek yapılır. How do I properly use negative lookahead for this Java regex? sorusundan aldığım örnek aşağıda.
Bir başka örnek ise burada.
Bu örnekte 3 haneli bir sayının &# karakterleri ve alfanümerik bir metin ile başlamadığı kontrol edilir.

Bir diğer örnekte ise  "-" karakteri başlamayan boşluk karakteri ayrılıyor.


Positive LookBehind
Positive Lookbehind yazısına taşıdım

Hiç yorum yok:

Yorum Gönder