lookaround and other nasty words ultraedit 12.?

Find, replace, find in files, replace in files, regular expressions

lookaround and other nasty words ultraedit 12.?

Postby melser.anton » Wed Feb 06, 2008 9:14 pm

Hi all,

I am trying to do the following (ultraedit 12.?) :

Remove (replace with an empty string, or maybe a space) all of the instances of <br> in a string UNLESS they occur between THEN and ENDCASE or DEFAULT and ENDDEFAULT.

So

{SELECT {[Liste1]} <br>CASE "3case" <br> THEN 1<br> ENDCASE<br>CASE "1" THEN 2 ENDCASE<br> DEFAULT Default<br> a moi ENDDEFAULT<br>
ENDSELECT}


Should end up

{SELECT {[Liste1]} CASE "3case" THEN 1<br> ENDCASE CASE "1" THEN 2 ENDCASE DEFAULT Default<br> a moi ENDDEFAULT
ENDSELECT}


I was thinking that lookaround was the way to go but nothing I try (and I won't bother you with the 10s of useless expressions I've tried!) gets me anywhere...

If there are any true demons out there, then what we really need to end up with is something that will do the following...

{SELECT {[Liste1]} <br>CASE "3case" <br> THEN 1 {SELECT {[Liste1]} <br>CASE "3case" <br> THEN 1<br> ENDCASE<br>CASE "1" THEN 2 ENDCASE<br> DEFAULT Default<br> a moi ENDDEFAULT<br>
ENDSELECT} ENDCASE<br>CASE "1" THEN 2 ENDCASE<br> DEFAULT Default<br> a moi ENDDEFAULT<br>
ENDSELECT}

Goes to :

{SELECT {[Liste1]} CASE "3case" THEN 1 {SELECT {[Liste1]} CASE "3case" THEN 1<br> ENDCASE CASE "1" THEN 2 ENDCASE DEFAULT Default<br> a moi ENDDEFAULT
ENDSELECT} ENDCASE CASE "1" THEN 2 ENDCASE DEFAULT Default<br> a moi ENDDEFAULT
ENDSELECT}


So in fact the <br> can/should be removed between THEN and ENDCASE (and DEFAULT and ENDDEFAULT) but ONLY if the <br>s are within a {SELECT...ENDSELECT}, and within that the normal rules should apply...

Am I as clear as mud?

Any help or abuse most appreciated!

Cheers

Anton
User avatar
melser.anton
Newbie
 
Posts: 1
Joined: Wed Feb 06, 2008 12:00 am

Re: lookaround and other nasty words ultraedit 12.?

Postby pietzcker » Wed Feb 06, 2008 10:57 pm

Without having read your post thoroughly, there are two things you should know: First, positive lookaround is and always has been broken in UE. Finding matches works, but replacing doesn't. I have been telling that to support since V12, and so far I have always received the reply "We know the problem, and we will fix it some day". Negative lookaround does work correctly.

Second, lookbehind only allows for a fixed number of characters (i.e. no * or + etc.). That's a limitation of Perl regexes as a whole, not UE's fault. So your second example couldn't be done in a regex with lookaround even if UE's Perl regex engine would work fully correct.
User avatar
pietzcker
Master
Master
 
Posts: 241
Joined: Sun Aug 22, 2004 11:00 pm

Re: lookaround and other nasty words ultraedit 12.?

Postby pietzcker » Thu Feb 07, 2008 6:32 am

OK, now let's see. I need some more info since the sample is so small:

Is there any restriction on what can be between THEN and ENDCASE or between DEFAULT and ENDDEFAULT? Especially other tags besides <br>? Could THEN/ENDCASE and DEFAULT/ENDDEFAULT be nested (THEN ... DEFAULT...ENDDEFAULT ... ENDCASE or THEN ... THEN ... ENDCASE ... ENDCASE?)

Will the potential matches (i.e. those where you want to preserve the <br>) always be on one line or can there be line breaks in-between?

I'm quite confident that this can be solved. Can you also attach a longer sample file with your answer?

Cheers,
Tim
User avatar
pietzcker
Master
Master
 
Posts: 241
Joined: Sun Aug 22, 2004 11:00 pm


Return to Find/Replace/Regular Expressions