我需要一个正则表达式来从两种类型的URI中提取
http://example.com/path/to/page/?filter
http://example.com/path/to/?filter
基本上,在这两种情况下,我都需要以某种方式隔离并返回
/path/to
和
?filter
也就是说,/path/to
和filter
都是任意的。所以我想我需要 2 正则表达式?我在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
!
答案 0 :(得分:4)
使用parse_url可能会比正则表达式更容易并且副作用更少:
$querystring = parse_url($url, PHP_URL_QUERY);
$path = parse_url($var, PHP_URL_PATH);
然后,您可以在路径上使用explode来获取前两个段:
$segments = explode("/", $path);
答案 1 :(得分:0)
试试这个:
^http://[^/?#]+/([^/?#]+/[^/?#]+)[^?#]*\?([^#]*)
这将为您提供前两个URL路径段和查询。
答案 2 :(得分:0)
未经测试但是:
^https?://[^ /]+[^ ?]+.*
哪个匹配http和https url有或没有路径,第二个参数应匹配,直到? (例如来自?过滤器)和。*除了\ n。
之外的任何字符答案 3 :(得分:0)
您是否考虑过使用explode()
代替http://nl2.php.net/manual/en/function.explode.php)?这项任务看起来很简单。你需要2个电话(一个用于/和一个用于?)但是一旦你这样做就应该很简单。