Thread View: pl.comp.lang.perl
6 messages
6 total messages
Started by Boguś
Wed, 23 Feb 2011 01:06
regexp i zmienna
Author: Boguś
Date: Wed, 23 Feb 2011 01:06
Date: Wed, 23 Feb 2011 01:06
13 lines
1399 bytes
1399 bytes
Witam Jest sobie string w którym chcę sprawdzić czy występuje dany wzorzec - i to jest proste if($string =~ /wzorek/) ale dalej chciałbym zrobić coś takiego że ten string dziele na 3 części 1 część - wszystko do wzorka 2 część - sam wzorek 3 część - reszta linii zza wzorka i tutaj nie wiem jak to ugryźć - split mi zwróci tylko 1 i 3 część a ja jako wzorek robię regexp i za nic nie mogę tego ruszyć Pozdrawiam
Re: regexp i zmienna
Author: hubert depesz lubaczewski
Date: Wed, 23 Feb 2011 14:56
Date: Wed, 23 Feb 2011 14:56
20 lines
1479 bytes
1479 bytes
On 2011-02-23, Boguś <bogus@pozdrawiam.spamerow.pl> wrote: > Witam > > Jest sobie string w którym chcę sprawdzić czy występuje dany wzorzec - i > to jest proste > if($string =~ /wzorek/) > ale dalej chciałbym zrobić coś takiego że ten string dziele na 3 części > 1 część - wszystko do wzorka > 2 część - sam wzorek > 3 część - reszta linii zza wzorka > i tutaj nie wiem jak to ugryźć - split mi zwróci tylko 1 i 3 część a ja > jako wzorek robię regexp i za nic nie mogę tego ruszyć $` $& $' depesz -- Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/ jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
Re: regexp i zmienna
Author: Szymon Sokół
Date: Wed, 23 Feb 2011 16:21
Date: Wed, 23 Feb 2011 16:21
32 lines
2391 bytes
2391 bytes
On Wed, 23 Feb 2011 15:56:37 +0100, hubert depesz lubaczewski wrote: > On 2011-02-23, Boguś <bogus@pozdrawiam.spamerow.pl> wrote: >> Witam >> >> Jest sobie string w którym chcę sprawdzić czy występuje dany wzorzec - i >> to jest proste >> if($string =~ /wzorek/) >> ale dalej chciałbym zrobić coś takiego że ten string dziele na 3 części >> 1 część - wszystko do wzorka >> 2 część - sam wzorek >> 3 część - reszta linii zza wzorka >> i tutaj nie wiem jak to ugryźć - split mi zwróci tylko 1 i 3 część a ja >> jako wzorek robię regexp i za nic nie mogę tego ruszyć > > $` $& $' Też można, albo można: $string =~ /(.*)(wzorek)(.*)/ a potem skorzystać z $1, $2, $3. TIMTOWTDI. A poza tym nie jest prawdą, że split zwróci tylko 1 i 3 - wystarczy użyć nawiasów we wzorcu: my($pierwsza,$druga,$trzecia) = split /(wzorek)/, $string; co jest wyraźnie w opisie funkcji split napisane, tylko trzeba przeczytać więcej niż pierwsze dwa ekrany... -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Re: regexp i zmienna
Author: hubert depesz lubaczewski
Date: Wed, 23 Feb 2011 16:49
Date: Wed, 23 Feb 2011 16:49
31 lines
2018 bytes
2018 bytes
On 2011-02-23, Szymon Sokół <szymon@bastard.operator.from.hell.pl> wrote: > On Wed, 23 Feb 2011 15:56:37 +0100, hubert depesz lubaczewski wrote: > >> On 2011-02-23, Boguś <bogus@pozdrawiam.spamerow.pl> wrote: >>> Witam >>> >>> Jest sobie string w którym chcę sprawdzić czy występuje dany wzorzec - i >>> to jest proste >>> if($string =~ /wzorek/) >>> ale dalej chciałbym zrobić coś takiego że ten string dziele na 3 części >>> 1 część - wszystko do wzorka >>> 2 część - sam wzorek >>> 3 część - reszta linii zza wzorka >>> i tutaj nie wiem jak to ugryźć - split mi zwróci tylko 1 i 3 część a ja >>> jako wzorek robię regexp i za nic nie mogę tego ruszyć >> >> $` $& $' > > Też można, albo można: > $string =~ /(.*)(wzorek)(.*)/ > a potem skorzystać z $1, $2, $3. TIMTOWTDI. to może zmienić wynik. tzn. ogólnie idea jest słuszna, ale trzeba pamiętać, że czasem wynik tego co ja zaproponowałem jest inny niz tego co ty zaproponowałes. depesz -- Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/ jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
Re: regexp i zmienna
Author: Michal Jankowski
Date: Wed, 23 Feb 2011 18:49
Date: Wed, 23 Feb 2011 18:49
21 lines
1450 bytes
1450 bytes
Szymon Sokół <szymon@bastard.operator.from.hell.pl> writes: >> $` $& $' > $string =~ /(.*)(wzorek)(.*)/ > my($pierwsza,$druga,$trzecia) = split /(wzorek)/, $string; Spróbujcie: ------------------------------------------------------------ #!/usr/bin/perl -w $s = "Ala ma kota, a Ola ma psa"; $s =~ /ma/; print "($`) ($&) ($')\n"; $s =~ /(.*)(ma)(.*)/; print "($1) ($2) ($3)\n"; ($a,$b,$c) = split /(ma)/, $s; print "($a) ($b) ($c)\n"; ------------------------------------------------------------- Wesołego. MJ
Re: regexp i zmienna
Author: Szymon Sokół
Date: Wed, 23 Feb 2011 20:37
Date: Wed, 23 Feb 2011 20:37
31 lines
2441 bytes
2441 bytes
On Wed, 23 Feb 2011 19:49:18 +0100, Michal Jankowski wrote: > Szymon Sokół <szymon@bastard.operator.from.hell.pl> writes: > >>> $` $& $' >> $string =~ /(.*)(wzorek)(.*)/ >> my($pierwsza,$druga,$trzecia) = split /(wzorek)/, $string; > > Spróbujcie: > ------------------------------------------------------------ > #!/usr/bin/perl -w > $s = "Ala ma kota, a Ola ma psa"; > > $s =~ /ma/; print "($`) ($&) ($')\n"; > $s =~ /(.*)(ma)(.*)/; print "($1) ($2) ($3)\n"; Owszem, jeśli komuś zależy na tym, żeby wyłapać *pierwsze*, a nie *ostatnie* wystąpienie wzorca, to należałoby użyć w pierwszym nawiasie .*? zamiast .* - OTOH, tego założenia nie było. > ($a,$b,$c) = split /(ma)/, $s; print "($a) ($b) ($c)\n"; ...a to działa poprawnie tylko w przypadku, gdy wzorzec się w ogóle nie powtarza. Chodziło mi raczej o pokazanie, że nie jest prawdą "split mi zwróci tylko 1 i 3 część", niż sugerowanie rozwiązania opartego o split. -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads