RegEx匹配URL的一部分

时间:2014-11-28 13:44:21

标签: php regex preg-match

我尝试使用RegExp来匹配网址的一部分。

有问题的网址是:

http://www.example.com/news/region/north-america/

由于我需要这个WordPress URL重写API的正则表达式,主题将只是URL的路径部分:

news/region/north-america

在上面的例子中,我需要能够提取路径的北美部分,但是当使用分页时,路径会变成这样:

news/region/north-america/page/2

我仍然只需要提取北美部分。

我提出的RegExp如下:

^news/region/(.*?)/(.*?)?/?(.*?)?$

但是,这仅与news/region/north-america news/region/north-america/page/2

不匹配

据我所知,我需要在north-america可选后设置尾随斜杠,但添加/?似乎无效。

3 个答案:

答案 0 :(得分:1)

试试这个:

preg_match('/news\/region\/(.*?)\//',"http://www.example.com/news/region/north-america/page/2",$matches);
$ matches [1]会给你输出。作为“北美”。

答案 1 :(得分:0)

您应该使用此正则表达式进行匹配:

^news/region/([^/]+)

即使URI变为news/region/north-america

,这也会为您/news/region/north-america/page/2

答案 2 :(得分:0)

georg's建议规则就像魅力一样:

^news/region/(.*?)(?:/(.*?)/(.*?))?$

对于那些对此正则表达式应用感兴趣的人,我在WP Rewrite API中使用它来获取自定义分类和页码(如果存在)并将相关匹配分配给WP重写:

  

$ newRules ['新闻/区域/(?)(?:??/()/(*))?$'] =&# 39;?的index.php区域= $匹配[1]&安培; forcetemplate =新闻与寻呼= $匹配[3]&#39 ;;