I have this pattern ^(?:http://)?(?:www.)?(.*?)/?(.*?)$ but it’s still not perfect.
Let’s say we have these urls to test against it:
example.com
example.com/
www.example.com/
http://example.com/
example.com/param
http://example.com/params/
The final output should be example.com/ if there’s no parameters and example.com/params/ if with parameters. My problem is that it matches only second group. It doesn’t look like /? is working otherwise it would stop on slash character. Is it possible to achieve what I want using only one pattern?
So you want the host name in $1? Your regex is ambiguous, there are many ways to match it; the regex engine will prefer the longest, leftmost possible match. If you don’t want slashes in the first part, then say so. Explicitly.
(?:http://)?(?:www\.)?([^/]*)?/?(.*)?$