正则表达式匹配两个静态URL组件之间的部分

时间:2015-04-23 20:36:18

标签: php regex

我有一个这样的网址:http://example.com/c/TEXTTOMATCH/。问题是网址并不总是这样;有时它是http://example.com/c/TEXTTOMATCH/#/?test。我试图使用正则表达式来抓取/c//之间的所有内容。我试过了

$catpreg    = preg_match('/c(.*)/', $reffer, $matches);

但它失败了。

2 个答案:

答案 0 :(得分:3)

这个怎么样:

<?php
$url='http://example.com/wreqwreqrq/rfqewrqwe/c/TEXTTOMATCH/';
$split_url=parse_url($url, PHP_URL_PATH);
//print_r($split_url);

$e=explode('/',$split_url);

//find "c" key and add one

$find=array_search('c',$e);

echo $e[$find+1];

答案 1 :(得分:2)

试试这个:

preg_match('#/c/(.*?)/#', $reffer, $matches);

你只是c之后的所有内容,与斜杠不匹配。你的调用中的斜杠被用作正则表达式的分隔符,我使用#作为分隔符,因此我可以在正则表达式中使用/而不必转义它们。

非贪婪量词.*?确保它仅与第二个示例中的TEXTTOMATCH匹配,而不是TEXTTOMATCH/#