Reg. vyraz match & non-match

Honza Pazdziora adelton na informatics.muni.cz
Pátek Srpen 30 18:36:40 MEST 2002


On Fri, Aug 30, 2002 at 06:25:52PM +0200, Jindrich Kubec wrote:
> 
> 1) string1: neco string2
> 2) string1: neco neco neco
> 3) string2 neco string1
> 4) string1
> 5) string1:string2
> 
> Vystup:
> Chci radky, kde je string1: ale ne string2, tj. radky 2,3,4.
> 
> Jde to napsat jednim regularnim vyrazem? Me se to nepodarilo a perlre mi
> moc nepomohlo :-( Mastering RE mam bohuzel zatim sbaleny v nekde
> garazi...

No, mam pocit, ze to zadani neni moc konzistentni (a taky mi vzalo pet
minut, nez jsem zjistil, ze chyba neni v mem kodu, kterym se snazim
dostat radky 2, 3, 4, ale v tech datech, ktere tomu davam cut'n'paste
na vstup).

Takze: protoze chcete radky 3 a 4, tak predpokladam, ze nechcete
matchovat string1: (s dvojteckou na konci), ale string (bez
dvojtecky). Nicmene stale mi zbyva problem, ze chcete na vystup radek
3, ale na radku 3 retezec strin2 prece je. Kazdopadne odpoved je

	/^(?!.*string2.*$).*string1/s

to Vam vrati radky 2 a 4 a to musi prozatim stacit, do vyjasneni
zadani ;-)

Ted negativni match (ze tam straing2 nema byt) je tam udelan negativnim
lookaheadem, coz je regularni vyraz, kterou perl hleda od aktualni
pozice dobrava. Cili /^(?!.*string2.*$)/ mi zajisti, ze string2 v tom
celem vyrazu nebude, a pak uz pouze namatchuji string1 nekde v tom
retezci.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
      ... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------


Další informace o konferenci Perl