我有这种模式^(?:http://)?(?:www.)?(.*?)/?(.*?)$
但它仍然不完美。
假设我们有这些网址来测试它:
example.com
example.com/
www.example.com/
http://example.com/
example.com/param
http://example.com/params/
如果没有参数,最终输出应为example.com/
,如果有参数,则为example.com/params/
。我的问题是它只匹配第二组。它看起来不像/?
正在工作,否则会停在斜线字符上。是否有可能只使用一种模式实现我想要的效果?
答案 0 :(得分:2)
所以你想要1美元的主机名?你的正则表达式是模糊的,有很多方法可以匹配它;正则表达式引擎将更喜欢最长,最左边的匹配。如果您不想在第一部分中使用斜杠,那么请说明。明确。 (?:http://)?(?:www\.)?([^/]*)?/?(.*)?$
答案 1 :(得分:0)
我使用的是:
((?:(?:https?://)?[\w\d:#@%/;$()~_?\+\-=&]+|www|ftp)\.[\w\d:#@%/;$()~_?\+\-=&\.]+)
URL的问题在于可以编写很多方法,这就是为什么上面的代码看起来很拥挤。这将匹配上面的所有示例,但它也会匹配以下内容:
alkasi.jaias
希望这会让你前往你需要或想去的地方,也许有人可能会来到我身后并清理一下(这是清晨,我正准备上班,我已经筋疲力尽了。:P)