Article View: pl.comp.lang.perl
Article #39914Re: wyraz za, wyraz przed
From: Maciej Misiak
Date: Wed, 03 Nov 2004 14:55
Date: Wed, 03 Nov 2004 14:55
59 lines
2779 bytes
2779 bytes
> No cóż... Głupi jestem... Nawet przepisać dobrze nie potrafię :] Wersja
> poprawiona (nie wiem czemu ja tamto tak napisałem :\ )
Pewnie sie spieszyles :>
> $lineNumber = 0;
Nie mecz sie sam kiedy mozesz byc leniwy...
HANDLE->input_line_number(EXPR)
$INPUT_LINE_NUMBER
$NR
$.
Current line number for the last filehandle accessed.
Each filehandle in Perl counts the number of lines that have been read from it.
> No ale to chyba na to samo wychodzi co w Twoim rozwiązaniu. Dlaczego
> więc niektóre "nie" są opuszczane?
przyklad: 'tak nie tak nie'
word in lne 'tak nie tak nie':
(pos=0) tak nie tak (pos=11)
regexp znalazl nastepujacy kawalek 'tak nie tak'. Znalazl na pozycji 0, omija
wiec caly kawalek, ktory znalazl i ustawia sie na pozycji 11. W kolejnym
przebiegu wyszukuje zadanego stringa w nastepujacym stringu: ' nie'. Poniewaz
przed 'nie' nie ma ani normalnego slowa ani poczatku stringa, wiec drugie
dopasowanie nie nastapi. Regexp, jesli ma kontynuowac szukanie (przelacznik g),
ustawia sie bezposrednio za tym, co wlasnie znalazl.
Jesli sie chce, dostac w wyniku takie znaleziska:
'tak nie tak'
'tak nie'
trzeba uzyc asercji, ktora rowniez zmusza regexp do znalezienia tego, co w niej
jest, natomiast nie zostaje uwzgledniona w $& czyli w wyszukanym stringu.
Regexp bedzie wygladal nastepujaco:
while( $line =~ /(^|([^\s]+\s))\s*${word}(?=(\s+[^\s]+)|(\s*$))/g )
{
printf("word in lne ${line}: $& \n");
}
Przy czym print wypisze tylko:
word in lne 'tak nie tak nie': tak nie
word in lne 'tak nie tak nie': tak nie
bo $& nie zawiera trzeciego slowa z dopasowania. Zeby je wyswietlic musisz
dodac $3 do stringa:
printf("word in lne ${line}: $& $3\n");
To z grubsza tyle :)
pzdr
Grizzley
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Technical Details
Message-ID:
<42c6.00000a06.4188f17c@newsgate.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!ict.pwr.wroc.pl!lublin.pl!news.onet.pl!newsgate.onet.pl!niusy.onet.plReferences:
<cmaktj$6uj$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!ict.pwr.wroc.pl!lublin.pl!news.onet.pl!newsgate.onet.pl!niusy.onet.pl From: "Maciej Misiak" <grizzleyWYTNIJTO@op.pl> Newsgroups: pl.comp.lang.perl Subject: Re: wyraz za, wyraz przed Date: 3 Nov 2004 15:55:56 +0100 Organization: Onet.pl SA Lines: 59 Message-ID: <42c6.00000a06.4188f17c@newsgate.onet.pl> References: <cmaktj$6uj$1@inews.gazeta.pl> NNTP-Posting-Host: newsgate.onet.pl Mime-Version: 1.0 X-Trace: newsgate.test.onet.pl 1099493756 21096 213.180.130.18 (3 Nov 2004 14:55:56 GMT) X-Complaints-To: abuse@onet.pl NNTP-Posting-Date: 3 Nov 2004 14:55:56 GMT X-Mailer: http://niusy.onet.pl X-Forwarded-For: 217.153.136.40, 157.25.5.68, 192.168.243.38 X-User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit