代码之家  ›  专栏  ›  技术社区  ›  axsuul

从URI提取的正则表达式

  •  1
  • axsuul  · 技术社区  · 16 年前

    我需要从两种类型的URI中提取正则表达式

    http://example.com/path/to/page/?filter
    http://example.com/path/to/?filter
    

    基本上,在这两种情况下,我都需要以某种方式隔离并返回

    /path/to
    

    ?filter
    

    也就是说,两者都 /path/to filter 是任意的。所以我想我需要 这个的正则表达式?我在PHP中这样做,但是如果有人能帮助我使用正则表达式,我可以计算出其余的。感谢您的时间:)

    编辑:例如,如果要清除

    http://example.com/help/faq/?sort=latest
    

    我想得到 /help/faq ?sort=latest

    另一个例子

    http://example.com/site/users/all/page/?filter=none&status=2
    

    我想得到 /site/users/all ?filter=none&status=2 . 注意我不想得到 page !

    4 回复  |  直到 16 年前
        1
  •  4
  •   Chris Van Opstal    16 年前

    使用 parse_url 可能更容易,副作用更少,然后是regex:

    $querystring = parse_url($url, PHP_URL_QUERY); 
    $path = parse_url($var, PHP_URL_PATH);
    

    然后可以在路径上使用explode来获取前两个段:

    $segments = explode("/", $path);
    
        2
  •  0
  •   Gumbo    16 年前

    试试这个:

    ^http://[^/?#]+/([^/?#]+/[^/?#]+)[^?#]*\?([^#]*)
    

    这将获得前两个URL路径段和查询。

        3
  •  0
  •   Aif    16 年前

    未经测试,但:

    ^https?://[^ /]+[^ ?]+.*
    

    哪一个应该与HTTP和HTTPS URL(有或无路径)匹配,第二个参数应该匹配到?(从?例如filter)和.*除\n之外的任何字符。

        4
  •  0
  •   Roland Bouman    16 年前

    你考虑过使用吗 explode() 而不是( http://nl2.php.net/manual/en/function.explode.php )?这项任务似乎足够简单。您需要两个电话(一个用于/和一个用于?)但一旦你做到了这一点就应该很简单了。