I have a URL, and I'm trying to match it to a regular expression to pull out some groups. The problem I'm having is that the URL can either end or continue with a "/" and more URL text. I'd like to match URLs like this:
- http://server/xyz/2008-10-08-4
- http://server/xyz/2008-10-08-4/
- http://server/xyz/2008-10-08-4/123/more
But not match something like this:
So, I thought my best bet was something like this:
/(.+)/(\d{4}-\d{2}-\d{2})-(\d+)[/$]
where the character class at the end contained either the "/" or the end-of-line. The character class doesn't seem to be happy with the "$" in there though. How can I best discriminate between these URLs while still pulling back the correct groups?
Best Answer
To match either / or end of content, use
(/|\z)
This only applies if you are not using multi-line matching (i.e. you're matching a single URL, not a newline-delimited list of URLs).
To put that with an updated version of what you had:
Note that I've changed the start to be a non-greedy match for non-whitespace (
\S+?
) rather than matching anything and everything (.*
)