Regular Expression

bilamir

New member
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 :)
 
Üst