[thelist] RegEx Fun
.jeff
jeff at members.evolt.org
Fri Jan 4 17:56:12 CST 2002
seth,
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
> From: Seth Bienek
>
> The same regexp will work for the last two data items
> you are wanting to extract (with the one obvious
> change. :)
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
somehow i felt that one regex would work for this, but wasn't quite sure how
to go about it.
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
> What you may consider doing is looking for the end of
> the name/value pairs, and excluding them that way. Since
> we know that URL name/value pairs always end with either
> the start of a new value (&) or the end of the URL
> itself (line breaks are considered to be in the same
> class of characters as spaces as far as CF's posix-based
> RegEx engine is concerned), you can eliminate any
> key/value pair like so:
>
> <cfset myNewVar = ReReplaceNoCase(searchstring,
> "[?|&]VarToReplace=[^[&|[:space:]]*", "")>
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
and bingo, that took care of it.
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
> Which says "If a string within the variable
> 'searchstring' starts with a question mark or ampersand,
> followed by the name of the variable I want to eliminate
> and the equal sign, then everything up until we hit the
> next ampersand or space-type character is a match" then
> replace it with an empty string.
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
ok, precisely where in the regex does it allow characters in between the "="
and the name/value delimiting character (& or [:space:])? or does
"[^[&|[:space:]]" mean anything that's "NOT & or [:space:]"? nevermind, i
think i figured it out myself.
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
> That would also make a nifty UDF if you're using CF5.
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
yes it would.
<tip type="ColdFusion" author=".jeff" coauthor="seth bienek">
function URLReplace(string, substring1, substring2)
{
var returnValue = string;
var scope = 'one';
if(ArrayLen(arguments) EQ 4) scope = arguments[4];
returnValue = REReplaceNoCase(string, '[?|&]' & substring1 &
'=[^[&|[:space:]]*', substring2, scope);
return returnValue;
}
</tip>
thanks,
.jeff
http://evolt.org/
jeff at members.evolt.org
http://members.evolt.org/jeff/
More information about the thelist
mailing list