On 11/14/06, Peter Boughton <[EMAIL PROTECTED]> wrote:
> I'm guessing your problem is with greedy matching.
> Your current regex will look like this: (partone).*(parttwo)
> It should look like this: (partone).*?(parttwo)
> (not the question mark after the asterisk)
>
> Also, if you're doing this in three steps, you'll want to do it in one.
> Actually, here we go, have a try with this...
> Search:
> <Emphasis type="([biuBIU])[^"]*">(.*?)</Emphasis>
> Replace:
> <\1>\2</\1>
>
> (or <$1>$2</$1> if you're using something that uses dollars rather than
> slashes)
>
> Not sure if you'll need to wrap that in a while-loop to guarantee
> everything gets replaced.
>
>
> Hmmm, odd - I just decided to quickly test that, and it only worked
> without the non-greedy modifier. ie: this worked:
> <cfloop condition="#REFind('<Emphasis type="([biuBIU])[^"]*">',X)#">
> <cfset X = REReplace(X,'<Emphasis
> type="([biuBIU])[^"]*">(.*)</Emphasis>',"<\1>\2</\1>","all")/>
> </cfloop>
The problem she's going to have is that the regex has no way of
knowing which </Emphasis> tag is the proper close tag in a nested
scenario. Using the original example:
<Book>
<Emphasis type="Bold">
sample text
<Emphasis type="Italic">
sample Text
<Emphasis type="underline">
sample text
</Emphasis>
</Emphasis>
sample text
</Emphasis>
</Book>
A greedy match (.*) on <Emphasis type="Bold"> would find the very last
</Emphasis> which happens to be correct, but a greedy match on
<Emphasis type="Italic"> would also return that same </Emphasis> (that
is, the very last one). Not correct. On the other hand, a non-greedy
match (.*?) on <Emphasis type="Italic"> would return the very first
</Emphasis> tag it finds - in this case the close tag for underline.
Also not correct.
As far as I know the only way to accomplish this is to loop over
matches and manually find the proper end tag - regex by itself cannot
accomplish this particular task.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Introducing the Fusion Authority Quarterly Update. 80 pages of hard-hitting,
up-to-date ColdFusion information by your peers, delivered to your door four
times a year.
http://www.fusionauthority.com/quarterly
Archive: http://www.houseoffusion.com/groups/RegEx/message.cfm/messageid:987
Subscription: http://www.houseoffusion.com/groups/RegEx/subscribe.cfm
Unsubscribe:
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.21