[thelist] RegEx Fun
Seth Bienek
seth at sethbienek.com
Fri Jan 4 17:17:58 CST 2002
Hey Jeff,
----
>i need some assistance from those of you with more confidence with regular
>expressions than i have.
>
>let's use the following strings as the examples:
<snippage>
>in these strings, the "pageresponse" url variable could have any string of
>text after it, but will always be url encoded. in the case of any of the
>strings above, i want to find instances of "&pageresponse=Item%20added",
>"pageresponse=Item%20updated", or "pageresponse=Item%20removed". this is
>the first pattern i'm looking for.
---
The same regexp will work for the last two data items you are wanting to
extract (with the one obvious change. :)
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:]]*", "")>
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.
You could do what you are proposing simply like this:
<cfset MyURL =
"/search/?keywords=studio&option=any&maxrows=10&thumbnails=1&pageresponse=It
em%20added&cfid=2126967&cftoken=69981973">
<cfset varsToDelete = "cfid,cftoken,pageresponse">
<cfloop list="#varsToDelete#" index="i">
<cfset MyURL = ReReplaceNoCase(MyURL, "[?|&]#i#=[^[&|[:space:]]*", "")>
</cfloop>
<cfoutput>
#MyURL#
</cfoutput>
That would also make a nifty UDF if you're using CF5.
Hope it helps,
Seth
More information about the thelist
mailing list