Thanks that did it.

I hate regular expressions (or maybe am in awe of their power) but you're my 
new best friend.


 
-------------
Patrick Kerley
[email protected]
-------------


________________________________
From: Peter Boughton <[email protected]>
To: cf-talk <[email protected]>
Sent: Tuesday, June 14, 2011 12:16 PM
Subject: Re: Regular Expression Help


Give this a go:

    <cfset Result = InputText.replaceAll
        ( '~\{(?:(?!</a>).)+(?<!\}~)(?=</a></li>)'
        , '$0}~'
        ) />


It uses the java replaceAll regex function so that it can do the negative 
lookbehind to ensure existing correct items are not changed, meaning it can be 
run multiple times.

Accepts any character (except newline) until it finds a closing A tag.

If newlines are required, that's just a one character change:

    '~\{(?s:(?!</a>).)+(?<!\}~)(?=</a></li>)'

(Which adds the 's' flag into what was a non-capturing group, meaning '.' also 
matches newlines.)


If there's the possibly of a '~{' appearing outside this context, it may need 
extra limits applied to work correctly.

Assuming there should not be any tags inside the ~{...}~ part, I would change 
the '.' for a '[^<>]' which makes it a bit 'safer':

    '~\{(?:(?!</a>)[^<>])+(?<!\}~)(?=</a></li>)' 



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Order the Adobe Coldfusion Anthology now!
http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion
Archive: 
http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:345293
Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm

Reply via email to