仅从URL获取URI段

时间:2013-01-24 23:33:06

标签: regex url

我正在尝试使用正则表达式获取URI段。

示例URI:

http://abc.com/hello/hi/bye?humm/ok=hi&ya=yaya/wow/waaah
               ^^^^^ ^^ ^^^                    ^^^ ^^^^^

我在尝试:

/(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

但它不能正常工作。查询字符串未被排除(wow/waaah)。

所以,当我尝试以下操作时,一切都被排除在外:

/(?<!?.+)(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

这有什么问题?

1 个答案:

答案 0 :(得分:1)

你忘了逃避第二个正则表达式中的第二个?。它应该是:

/(?<!\?.+)(?<=\/)[\w-]+(?=(\/|$|\r|\?))/g

注意:您可以通过使用如下字符类来改进正则表达式:

/(?<!\?.+)(?<=\/)[\w-]+(?=[/\r\n?]|$)/g

修改

对于满足所有不同风格的正则表达式的最低公分母解决方案,您需要两个步骤:

  • 删除尾随?及所有后续字符(如果存在):


    ^[^/]+//[^/]+([^?]+)

    保留捕获组1中返回的字符串。

  • 通过循环来提取URI段:


    /([\w-]+)

    这些段在捕获组1中返回。