[Linux-programlama] Re: Regex sorusu

---------

[Linux-programlama] Re: Regex sorusu

From: Recai Oktaş <roktas_at_debian.org>
Date: Fri, 7 Nov 2008 17:28:48 +0200
Message-ID: <20081107152848.GA8789@localhost.localdomain>

Merhaba,

* Azer Koculu [2008-11-07 15:48:46+0200]
> Bir dosyadaki tum console.log(); komutlarini regex ile silmek
> istiyorum.Bunun icin su deseni yazdim; console.log[^\n]+;
>
> Gordugunuz gibi, multiline console komutlarini temizlemiyor, yani;
>
> console.log(
> "fff"
> );
>
> Eger multiline kodlari da yakalamak istersem komutun kapandigi yer
> karisabiliyor, ornegin soyle bir kod olsun:
>
> console.log(
> 123
> )
>
> print("hello world");
>
> Bu kodda console.log'un sonundaki parantezi yakalayan desenim,
> print'in sonundaki parantezi karistirdigi icin tum kod siliniyor.Buna
> benzer bir durum kod renklendirirken de karsima cikmisti cozememistim,
> yardimci olursaniz sevinirim.

Genişletilmiş düzenli ifade motorları eşleştirmede (istisnalar bir yana)
"greedy" ("açgözlü") davranır, yani olası en uzun eşleştirmeyi yapar ki
sizin verdiğiniz örnekte eşleştirmenin print'e ait kapama parantezine kadar
uzatılmasının nedeni bu. Başvurmanız gereken anahtar sözcük: "non-greedy".

Bu uygulamayı hangi dilde yazdığınızı belirtmemişsiniz. Kullandığınız
dilde PCRE (Perl Uyumlu Düzenli İfade) desteği olduğunu varsayarak
aşağıdaki Perl örneğinde geçen düzenli ifadeden yararlanabilirsiniz:

        $ cat /tmp/t.pl
        # örnek dizgi
        $str = <<'EOF';
        console.log(
                123
        );
        print("hello world");
        console.log("fff");
        EOF

        $str =~ s/console[.]log\s*[(].*?[)][;]//smg; # 'smg'ye dikkat!
                                     # ^ '?' → non-greedy niteleyici
        print $str;
        $ perl /tmp/t.pl

        print("hello world");

-- 
roktas
_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Fri 07 Nov 2008 - 16:40:52 EET

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.