bilamir
New member
- Katılım
- 28 Ağu 2008
- Mesajlar
- 11
- Reaction score
- 0
- Puanları
- 0
merhaba arkadaşalar regular expressionlarla ilgili birşeyler yazmak istedim, olabildiğince basit ve dilden bağımsız bir şekilde anlatmaya çalışacağım, biçimsel diller ve otomata dersinin giriş konusu olan bu konuyu hemen heryerde kullanabiliriz tamamen sizin mantığınıza ve hayal gücünüze kalmış, regular expressionlarda sadece tek bir doğru yoktur yani bir problemi birden fazla regexle çözebilirsiniz, en basitinden bir text içinde bir arama yapacağımızı düşünelim örnek textimiz ne olsun
şu olsun
absdgtryeugkdjdhfhrrjfkdjf<a href= http://www.madyes.net/">ffgdhfgrrrrueyrurfuj oldumu
şimdi bu text içinde saklı bir link var ve öyle bir regex yazmalıyızki bu yazılar içinden bize doğru linki versin şimdi dilden bağımsız olarak yazarsak ne olur şöyle olut; bir link nasıl tanımlıdır? <a href= http:// ile başlamalıdır ozaman regex imizin başlangıcı budur peki neyle biter " karakteri ilede vermek istediğimiz linki bitiririz yani yapmak istediğimiz regex imiz şöyle olur (<a href= http://(*)") ahanda bu şekilde tabi bu dil bağımsız yazılışı orda tırnak işareti felan olduğundan o işaretten önce hangi dili kullanıyorsanız ona göre bir karakter daha kullanmanız gerekir mesela php için şöyle olur yazılış preg_match_all("'<a href=\"http://(.*?)\"') ahanda bittiii
bunu yazduğınız ne kadar uzun bir metin olursa olsun bu yapıya uygun her türlü linki önünüze serecektir, başka bir örnekte web sayfalarındaki email doğrulamalarıdır, nedir emailin giriş zorunluluğu? sayı ile başlamayacak büyük yada küçük harf olabilir başlangıç bundan sonra sayıda gelebilir yazıda ondan sonra ne gelecek tabiiki @ karakteri ondan soora mutlaka yazı sonra . (nokta) sonra yine yazı
mantığını mutlaka doğru çıkarmalısınız benim mantıkta herhangi bir yanlışlık varmı tabiiki bilmiyorum ama o mantığa göre oluşturacaz birşeyler
şimdi neyle başlayacaktı ? yazıyla, yapalım hemen [a-zA-Z] ne demek bu? büyük yada küçük harfle başlaması gerektiğini anladık burdan, daha sonra herşey olabilir nedir o herşey yazı ve sayı
devam edelim [(a-zA-z)*(a-zA-z0-9)*] ahanda oldduuuu
yanlarına * koymamdaki maksat parantez içerisindeki işaretlerden istediğim kadar alabilirim demek yani ne olabili şimdilik şu olabilir = aaaaasgdhdgsBBBBBBBBssssa99888 yada a999999bbbb yada a9999 ama kesinlikle sayı ile başlayamayacağını anlattık ona
devam edelim bunlardan sonra ne gelecekti @ karakteri sadece bu karakter olması gerektiğinden bunu aynen yazarız yani son hali nasıl olur [(a-zA-z)*(a-zA-z0-9)*@] eveeet daha sonra ne olacaktı du bakiim
kesinlikle yazı gelmeliydi onuda şu şekilde ifade ederiz [(a-zA-z)*(a-zA-z0-9)*(@)(a-zA-Z)] oldumu ? süper oldu
daha sonra mutlaka . ( nokta ) gelmeliydi oda sabit bir karakter olduğundan aynen yazarız sonraki son hali
şu şekilde olur [(a-zA-z)*(a-zA-z0-9)*(@)(a-zA-Z)*(.)] tamammıdır ? bence güzel gidiyoruz şimdi noktadan sonra ne gelecek net com org falan filan uzantılar daha uzantıları tek tek tanımlamamız gerekir çünkü epey değişik uzantılar olabilir, o yüzden şu şekilde yaparsak gayet sağlam olma eğilimi gösterebilir
[(a-zA-z)*(a-zA-z0-9)*(@)(a-zA-Z)*(.)(com| com.tr | org | org.tr .... )] bu şekilde tanımlarsak epey sağlam yapmış oluruz uzatmışta olabilirim kesin internette daha kısa yolları olabilir
ama dediğim gibi bu dilden bağımsız bir yazılıştır yani diller üzerine yoğunlaştığımızda kendilerine özgü şeyleri keşfedebileceğiz ben öyle yaptım
regex te tüm olasılıkları düşünmeliyiz yazarken yoksa çok büyük yanlışlıklar yapabiliriz kodda sorun çıkarmaz ama tabiiki doğru sonuç alamayabilir ve buda başımıza epey sorulu işler açabilir
ve bazı çok basit problemlerde işin işinden çıkamamanız doğal olacak hemen yılmayın çünkü aslında onun o kadar basit olmadığını göreceksiniz ve kendinizle gurur duyup vayyy beee
diyeceksiniz, tabiiki regex leri kullanacaksanız elinizdeki verilerin düzenli veriler olması gerekiyor adında anlaşılacağı gibi bunlar regex ( düzenli ifadeler )
eğer verileriniz böyle değilse hiç uğraşmayıp başka mantıklar aramanız gerekir, biçimsel diller ve otomata dersinden şartlı geçmenin büyük gururuyla bu yazımı yazdıktan sonra hemen aşağıdaki linki ekleyip yazımı bitiriyorum ama sorusu merakı olan arkadaşlara mutlaka yardımcı olmaya çalışırım elimden geldiğince, yazı devrik yada anlaşılmaz yazılmış olabilir o yüzden özür diliyorum şimdiden teşekkür etmek isteyen arkadaşlar imzamda bulunan regular expression ile yapılmış web sitemi ziyaret edebilirler
fikirlerinide burdan okuyabilirim yazarlarsa sevinirim hepinize iyi çalışmalar kolaylıklar gelsin 