32 entry daha
  • simdi bu regexp'lerle ilgili onemli birsey var. burada deginilmemis, belki herkes biliyordur ancak kimisi yeni basliyordur ve regexp'i calismaz bu yuzden, yazalim ki faydamiz olsun. (gerci kimi entry'lerdeki regexp'lerde kullanilmis ancak aciklama yok)

    regexp'de greedy/non greedy denen bir olay vardir. normal sartlarda regexp'ler olabildigince cok match etmeye calisirlar, yani default olarak greedy calisirlar. bu da bazi zamanlarda problem yaratabilir.(match etmek istedigimiz sey tekrarliyorsa kendini vs). basit bir ornege bakacak olursak,

    elimizde soyle bir satir mevcut

    deneme123456test654321test

    ve biz bu satirda deneme ve test arasindaki degerleri dondurmek istiyoruz. su asagidaki dogru gorunebilir,

    /deneme(.*)test/

    ancak bu istedigimizi dondurmez. $1 icerigi 123456test654321 seklindedir. biz 123456 istiyoruz. (sebep *'in olabildigince cok match etmeye calismasidir.) bu durumda yapilabilecek olan sey *'dan sonra bir ? ile bu regexp'i non greedy yapmaktir.

    /deneme(.*?)test/

    bu durumda $1 icerigi 123456 olacaktir.

    not: ayni satir icin /deneme(\d+)test/ ifadesi de uygundur 123456 dondurmek icin ancak bugunku dersimizin konusu greedy/non greedy farki oldugundan * ile calisilmistir.
72 entry daha
hesabın var mı? giriş yap