Article View: be.comp.programming
Article #4974Re: Regex: hoe iets te excluden?
From: Gunter Schelfhout
Date: Tue, 27 May 2003 11:51
Date: Tue, 27 May 2003 11:51
57 lines
2882 bytes
2882 bytes
Walter Baeck wrote:
[knip]
>
> Ik vermoed dat grep "[^(foo)]bar hetzelfde is als grep "[^foo]bar"
> onder de versie die ik gebruik. Als ik "man regexp" goed begrijp,
> dan betekent dit dat er gezocht wordt op een string van precies
> 4 karakters, van de vorm .bar waarbij er op het puntje geen letter
> mag staan die voorkomt tussen in de "exclude list" [^foo].
idd
>
>> > Mijn oplossing zou dit monsterlijke gedrocht zijn:
>> >
>> > grep bar * | sed 's/foobar/ONGEWENST/g' | grep bar | sed
>> > 's/ONGEWENST/foobar/g'
>> >
>> > Hopelijk weet er iemand iets eleganter.
>>
>> grep -ie "bar" <file>| grep -iv "foobar"
>
> Dit lijkt me zeker niet de oplossing, aangezien O.P. vermeldde dat
> blabla foobar bar blabla
> toch WEL moest gematchd worden. Juist, Roel ? Dat maakt het nu net
> zo moeilijk..
Je hebt gelijk.
Maar deze Perl-oneliner doet w�l zijn werk zoals het moet. ;-)
perl -e 'while(<>) { print if m/(?<!foo)bar/i; }' <file>
Als <file> deze inhoud heeft:
Als bar in een zin voorkomt, moet
het gematcht worden.
Foobar in een zin, is geen match.
Als daarentegen foobar �n bar in een zin voorkomen,
dan is het weer wel geldig.
foobar
bar
Dit geeft:
Als bar in een zin voorkomt, moet
Als daarentegen foobar �n bar in een zin voorkomen,
bar
De regex is:
m/(?<!foo)bar/i
Dit betekent (in Perl, misschien ook in sed en andere) dat alle instanties
van bar gematched worden zolang er g��n foo voorstaat.
(?<!...) betekent "negative lookbehind".
--
Blood, sweat & tears
Technical Details
Message-ID:
<yjIAa.21981$1u5.1831@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!news-out.cwix.com!newsfeed.cwix.com!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<pXlza.15654$1u5.1208@afrodite.telenet-ops.be> <l8mza.15670$1u5.1346@afrodite.telenet-ops.be> <Afmza.15691$1u5.1402@afrodite.telenet-ops.be> <Vkmza.15706$1u5.1417@afrodite.telenet-ops.be> <3ED1EF43.F24F54DD@alcatel.be> <pQmAa.20289$1u5.1344@afrodite.telenet-ops.be> <3ED339E4.B9DFA679@alcatel.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: fcea4,42e50ad98d9b8861 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-05-27 04:52:07 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!news-out.cwix.com!newsfeed.cwix.com!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail From: Gunter Schelfhout <nospam@please.com> Subject: Re: Regex: hoe iets te excluden? Newsgroups: be.comp.programming References: <pXlza.15654$1u5.1208@afrodite.telenet-ops.be> <l8mza.15670$1u5.1346@afrodite.telenet-ops.be> <Afmza.15691$1u5.1402@afrodite.telenet-ops.be> <Vkmza.15706$1u5.1417@afrodite.telenet-ops.be> <3ED1EF43.F24F54DD@alcatel.be> <pQmAa.20289$1u5.1344@afrodite.telenet-ops.be> <3ED339E4.B9DFA679@alcatel.be> Lines: 57 User-Agent: KNode/0.7.1 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8Bit Message-ID: <yjIAa.21981$1u5.1831@afrodite.telenet-ops.be> Date: Tue, 27 May 2003 11:51:58 GMT NNTP-Posting-Host: 213.118.153.61 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1054036318 213.118.153.61 (Tue, 27 May 2003 13:51:58 MET DST) NNTP-Posting-Date: Tue, 27 May 2003 13:51:58 MET DST Organization: Telenet Internet