Article View: pl.comp.lang.perl
Article #39779Re: regex w wielu liniach, mam problem
From: Maciej Misiak
Date: Mon, 18 Oct 2004 14:43
Date: Mon, 18 Oct 2004 14:43
62 lines
4086 bytes
4086 bytes
> Grzegorz Szyszlo wrote:
>
> $line=~/ ^Job \s ([^\n]+) $ \n
> .*? ^\s\s Job\ Type \s+ : \s ([^\n]+) $ \n
> .*? ^\s\s Backup\ mode \s+ : \s ([^\n]+) $ \n
> .*? ^\s\s Job\ Start\ Time \s+ : \s ([^\n]+) $ \n
> .*? ^\s+ : \s+ Media \s+ : \s ([^\n]+) $ \n
> .*? ^\s+ Backup\ Last\ Objects? \s+ : \s+ End \s+ ([^\n]+) $ \n
> .*? ^\s+ Job\ End\ Time \s+ : \s ([^\n]+) $ \n
> .*? ^\s\s Completed\ Size \s+ : \s ([\d]+) [^\n]* $ \n
> .*? ^\s\s Failed\ Objects \s+ : \s ([^\n]+) $ \n
> .*? ^\s\s (Job\ Completed\ Succ?essfully) [^\n]* $ \n
> /xsm;
Nie jestem pewien czy w ogole '$ \n' na koncu kazdej linii jest potrzebne. Na
poczatku kolejnej linii jest .*? ktore z koncem linii sobie bezproblemowo
poradzi. Natomiast dana do pobrania do zmiennych $1-$10 i tak jest czytana az
do napotkania konca linii. Wiec proponuje tak:
$line=~/ ^Job \s ([^\n]+)
.*? ^\s\s Job\ Type \s+ : \s ([^\n]+)
.*? ^\s\s Backup\ mode \s+ : \s ([^\n]+)
.*? ^\s\s Job\ Start\ Time \s+ : \s ([^\n]+)
.*? ^\s+ : \s+ Media \s+ : \s ([^\n]+)
.*? ^\s+ Backup\ Last\ Objects? \s+ : \s+ End \s+ ([^\n]+)
.*? ^\s+ Job\ End\ Time \s+ : \s ([^\n]+)
.*? ^\s\s Completed\ Size \s+ : \s ([\d]+) [^\n]*
.*? ^\s\s Failed\ Objects \s+ : \s ([^\n]+)
.*? ^\s\s (Job\ Completed\ Succ?essfully) [^\n]*
/xsm;
Poza tym ja bym przemyslal czy na poczatku kazdej linii oraz miedzy dwukropkiem
a innymi napisami nie wstawic \s* Zaoszczedzi to bolu glowy, bo trzeba bedzie
sie zastanawiac czy np. po Media sa trzy spacje a przed Backup mode dwie czy na
odwrot.
> Btw. niech nikogo nie dziwia konstrukcje typu: "Job\ Type" .
> Chodzi o to, ze przy opcji /x , spacja jest traktowana jakby w zasadzie
> jej nie bylo, slashowanie pozwala przywrocic jej pierwotne znaczenie.
> nie wyczytalem tego w zadnym docu, posluzylem sie ta konstrukcja
> "na czuja" i poszlo. czyzby cos nieudokumentowanego? :)))
Jesli chodzi o dziwny sposob lapania spacji z backslashem '\ ' to to jest
identyczna technika jak w przypadku lapania jakiegokolwiek innego specjalnego
znaku, np. \$ albo \. Z powodu przelacznika /x nie mozna normalnie dopasowac
spacji, wiec '\ ' jest smiesznie wygladajacym, ale konsekwentnym sposobem
zapisu.
> aha. konstrukcja typu .*? z opcja /s na kolana co prawda
> nie powala, ale w moim przypadku jest to wystarczajaco wydajne,
> i osiagam zamierzony rezultat, czyli pominiecie dowolnej partii
> logu, bez ogladania sie na konce linii. w razie czego
> zawsze mozna zastosowac [^\n]* jesli konce linii jednak musza
> miec znaczenie :)
Wiec wlasnie, wywal znaki konca linii z konca linii :)
pzdr
Grizzley
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Technical Details
Message-ID:
<1d72.00000a9b.4173d684@newsgate.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!newsgate.onet.pl!niusy.onet.plReferences:
<cl056v$uj6$1@news.lublin.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!newsgate.onet.pl!niusy.onet.pl From: "Maciej Misiak" <grizzleyWYTNIJTO@op.pl> Newsgroups: pl.comp.lang.perl Subject: Re: regex w wielu liniach, mam problem Date: 18 Oct 2004 16:43:17 +0200 Organization: Onet.pl SA Lines: 62 Message-ID: <1d72.00000a9b.4173d684@newsgate.onet.pl> References: <cl056v$uj6$1@news.lublin.pl> NNTP-Posting-Host: newsgate.onet.pl Mime-Version: 1.0 X-Trace: newsgate.test.onet.pl 1098110597 11168 213.180.130.18 (18 Oct 2004 14:43:17 GMT) X-Complaints-To: abuse@onet.pl NNTP-Posting-Date: 18 Oct 2004 14:43:17 GMT X-Mailer: http://niusy.onet.pl X-Forwarded-For: 217.153.136.40, 157.25.5.66, 192.168.243.49 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