用于格式化url的正则表达式模式

时间:2011-09-03 11:48:40

标签: regex

我有这种模式^(?:http://)?(?:www.)?(.*?)/?(.*?)$但它仍然不完美。 假设我们有这些网址来测试它:

example.com
example.com/
www.example.com/
http://example.com/
example.com/param
http://example.com/params/

如果没有参数,最终输出应为example.com/,如果有参数,则为example.com/params/。我的问题是它只匹配第二组。它看起来不像/?正在工作,否则会停在斜线字符上。是否有可能只使用一种模式实现我想要的效果?

2 个答案:

答案 0 :(得分:2)

所以你想要1美元的主机名?你的正则表达式是模糊的,有很多方法可以匹配它;正则表达式引擎将更喜欢最长,最左边的匹配。如果您不想在第一部分中使用斜杠,那么请说明。明确。 (?:http://)?(?:www\.)?([^/]*)?/?(.*)?$

答案 1 :(得分:0)

我使用的是:

((?:(?:https?://)?[\w\d:#@%/;$()~_?\+\-=&]+|www|ftp)\.[\w\d:#@%/;$()~_?\+\-=&\.]+)

URL的问题在于可以编写很多方法,这就是为什么上面的代码看起来很拥挤。这将匹配上面的所有示例,但它也会匹配以下内容:

alkasi.jaias

希望这会让你前往你需要或想去的地方,也许有人可能会来到我身后并清理一下(这是清晨,我正准备上班,我已经筋疲力尽了。:P)