Article View: pl.comp.lang.perl
Article #39787Re: regex w wielu liniach, mam problem
From: Grzegorz Szyszlo
Date: Tue, 19 Oct 2004 08:33
Date: Tue, 19 Oct 2004 08:33
80 lines
4986 bytes
4986 bytes
Maciej Misiak wrote: >>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; dobre podejscie, dziala tak jak trzeba. $ \n na koncu stosowalem w celu zachaczenia, bo na poczatku wyluskiwalem przez (.*?) i wtedy $ \n wymuszal mi dopasowanie tego wczesniejszego do konca linii. tutaj faktycznie jest to zbedne. > 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. to jest akurat charakterystyka logu, i tam sa stosowanie "wciecia", gdzie przed wcieciem jest roznie, albo tabulator, albo kilka spacji. loteria. ale zawsze jest jakis "biaΕas" :) >>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. szkoda ze przy opisie /x nie jest to szczegolowo omowione. ale dobrze ze dziala jak powinno. >>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 :) i pewnie tak zrobie :) dzieki za uwagi. chociaz w innym poscie sygnalizuje inny, gorszy problem, ktorego samym regexpem pokonac nie potrafie, chodzi o to ze w logu niektore z fraz regexa moga nie wystepowac. chcialbym by odpowiedni $1 - $10 byl raportowany jako pusty lub undef, ale zeby cale wyrazenie zawsze znalazlo mi wszystko to, co da sie odnalezc. nie wiem jak to zrobic, byc moze nikt nie wie. znik.
Technical Details
Message-ID:
<cl2jhu$39i$1@news.lublin.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!lublin.pl!news.lublin.pl!not-for-mailReferences:
<cl056v$uj6$1@news.lublin.pl> <1d72.00000a9b.4173d684@newsgate.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!lublin.pl!news.lublin.pl!not-for-mail From: Grzegorz Szyszlo <znik@wbc.lublin.pl> Newsgroups: pl.comp.lang.perl Subject: Re: regex w wielu liniach, mam problem Date: Tue, 19 Oct 2004 10:33:19 +0200 Organization: lubman Lines: 81 Message-ID: <cl2jhu$39i$1@news.lublin.pl> References: <cl056v$uj6$1@news.lublin.pl> <1d72.00000a9b.4173d684@newsgate.onet.pl> NNTP-Posting-Host: user.wbc.lublin.pl Mime-Version: 1.0 X-Trace: news.lublin.pl 1098174846 3378 212.182.104.10 (19 Oct 2004 08:34:06 GMT) X-Complaints-To: abuse@news.lublin.pl NNTP-Posting-Date: Tue, 19 Oct 2004 08:34:06 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030721 Debian/1.4-1.nobse.2 X-Accept-Language: pl, en-us In-Reply-To: <1d72.00000a9b.4173d684@newsgate.onet.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit