🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #39914

Re: wyraz za, wyraz przed

#39914
From: Maciej Misiak
Date: Wed, 03 Nov 2004 14:55
59 lines
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.pl
References: <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