Article View: be.comp.programming
Article #8881Re: Vraagje over complexe regular expression
From: Dominique Devriese
Date: Sun, 09 Jun 2002 15:13
Date: Sun, 09 Jun 2002 15:13
109 lines
5467 bytes
5467 bytes
WimVDE <nospam@mail.box> writes:
> "WimVDE" wrote:
>
> > Nou ja, ik vraag schijnbaar wel iets vrij complex :)
> > Ik zit nu al enkele uren te knoeien met reguliere expressies, maar krijg
> > er niets deftigs uit. Is het uberhaupt wel mogelijk met een reguliere
> > expressie?
>
> "WimVDE" wrote:
>
> > Nou ja, ik vraag schijnbaar wel iets vrij complex :)
> > Ik zit nu al enkele uren te knoeien met reguliere expressies, maar krijg
> > er niets deftigs uit. Is het uberhaupt wel mogelijk met een reguliere
> > expressie?
>
> Ik ben weeral ietsje verder, maar nog niet ver genoeg :)
> Het blijkt dat Gravity de hele body van een bericht parsed als 1 string.
> De regelafbrekingen gebeuren door een \n karakter.
>
> Dus, ik had al:
>
> RegExp: --.*www\.provider\.be/wimvde
>
> Dat matcht op het voorkomen van mijn website in iemands signature. Nu is
> het de bedoeling dat dit omgekeerd wordt. Er mag geen match zijn wanneer
> mijn site voorkomt in iemand's signature. Hoe pak ik dat aan bij een
> reguliere expressie? Voor een enkel karakter weet ik dat de negatie
> gebeurt met het ^-teken, maar hoe zit het met een groep zoals
> bovenstaande voorbeeld?
>
> Nu om ervoor te zorgen dat er niet gematcht wordt op gequote text heb ik
> volgende expressie:
>
> RegExp: \n[^>][^\n]*wimvde
>
> Die \n staat er om Gravity duidelijk te maken dat een quote (>) steeds
> aan het begin van een regel begint. Dit om misverstanden te vermijden
> bij het vermelden van een url bijvoorbeeld (<url:http://www.site.be/>).
> De [^>] wijst erop dat aan het begin van de regel _geen_ '>' quote-teken
> mag voorkomen (er mag geen match zijn in de quote). Om er nu voor te
> zorgen dat er niet gematcht wordt op volgende situatie:
>
> ---------------------------------------------------------------------
> > zomaar wat bladvulling om het gewenste duidelijk
> > te maken aan de lezers van deze thread.
> > En WimVDE staat nu in het quoteblok
>
> Antwoord blah blah
> ---------------------------------------------------------------------
>
> Staat er ook [^\n]* wat betekent dat er na de quote geen linebreak mag
> voorkomen. Anders zou na het parsen van 'de eerste regel' meteen
> doorgegaan worden met de andere regels tot het voorkomen van WimVDE. De
> [^\n]* zorgt er dus voor dat alles lijn per lijn gebeurt.
>
> Dat werkt dus uitstekend. Maar hoe pas ik het aan zodat er wel een match
> is als WimVDE voorkomt in het eigenlijke bericht? Ik zou denken:
>
> RegExp: \n[^>]?[^\n]*wimvde
>
> De [^>]? zou er volgens mij voor moeten zorgen dat:
>
> ---------------------------------------------------------------------
> > En WimVDE staat nu in het quoteblok
> ---------------------------------------------------------------------
>
> Geen match geeft, en
>
> ---------------------------------------------------------------------
> En nu staat WimVDE in het eigenlijke antwoord
> ---------------------------------------------------------------------
>
> Wel een match geeft. Of ben ik mis? Maar dat schijnt dus niet te werken
> :(
>
> (dat m'n naam ook in de eerste regels kan voorkomen in het geval van een
> reply laat ik nog eventjes buiten beschouwing - eerst alles stap voor
> stap implementeren)
Hm... persoonlijk vind ik het nogal vergezocht om dit met ��n
reguliere expressie te proberen te doen... Ben je niet beter met een
perl-programmatje of zo... ?
sjuus
domi
(ik ken geen perl, maar ik denk dat het er ongeveer zo zou moeten
uitzien:
#!/bin/perl
while ( $regel = <> )
{
if ( $regel =~ m/^--.*$/ ) # begin van het signature
exit 1;
if ( $regel =~ m/^>.*$/ ) # een gequote blok
next;
if ( $regel =~ m/^.*WimVDE.*$/ ) # een regel met WimVDE
exit 0;
}
exit 1;
Dit programmatje retourneert dan 0 als je de mail moet lezen, en
anders 1... Ik weet niet direct hoe je dat dan kan laten samenwerken
met je procmail ( of gravity, maar ik noch apt-cache kennen dat... ),
maar dat zou niet zo'n groot probleem mogen zijn...
sjuus
domi
--
Dominique Devriese
Technical Details
Message-ID:
<87660seav2.fsf@pandora.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!newsswitch.lcs.mit.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!colt.net!newsfeed00.sul.t-online.de!t-online.de!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<MPG.176adae1b92f722d989680@news.telenet.be> <dd7M8.18513$ud.2228@afrodite.telenet-ops.be> <MPG.176b28cdfdb4da99989681@news.telenet.be> <MPG.176c2b128c40e687989682@news.telenet.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: fcea4,4dcdc590c5f344be X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-06-09 08:13:43 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!newsswitch.lcs.mit.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!colt.net!newsfeed00.sul.t-online.de!t-online.de!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail Sender: domi@flap Newsgroups: be.comp.programming Subject: Re: Vraagje over complexe regular expression References: <MPG.176adae1b92f722d989680@news.telenet.be> <dd7M8.18513$ud.2228@afrodite.telenet-ops.be> <MPG.176b28cdfdb4da99989681@news.telenet.be> <MPG.176c2b128c40e687989682@news.telenet.be> From: Dominique Devriese <fritmebufstek@pandora.be> Message-ID: <87660seav2.fsf@pandora.be> Lines: 109 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit Date: Sun, 09 Jun 2002 15:13:42 GMT NNTP-Posting-Host: 213.118.172.138 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1023635622 213.118.172.138 (Sun, 09 Jun 2002 17:13:42 MET DST) NNTP-Posting-Date: Sun, 09 Jun 2002 17:13:42 MET DST Organization: Telenet Internet