在URL字符串中提取第3次和第5次正斜杠之间的所有内容

时间:2015-02-15 00:54:01

标签: regex preg-match

使用RegEx我试图在http://www.domain.tld/content/article/26849929.html之类的网址(即本例中为content/article部分)中第3次和第5次正向删除之间提取所有内容。

稍后,我将使用以下PHP命令在PHP代码中用http://www.domain.tld/newalias/26849929.html这样的新别名替换它们:

preg_replace($pattern, $replacement, $string);

如果有人能够指出最短,最有效的方式,我将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

^(?:(?:[^\/]*\/){3})([^\/]*\/[^\/]*)

这会得到前三个正斜线,以及它们之前的任何东西,在非捕获组中,然后是第三个斜线加上第四个斜线以及随后的任何内容,直到捕获组中可能的第5个斜线。< / p>

我不确定这是从这个特定字符串中捕获你想要的东西的最好方法,但它是这个问题的一般解决方案。

Please see Regex 101 demo获得更全面的解释。

答案 1 :(得分:0)

在尝试了不同的方法之后,我来到了这个方面:

^(?:.*?\K\/){3}(.*)(?:.*?\/)

它适用于我,但我不确定它是否是最好的,因为它没有指示第五个斜线(我需要在第3和第5斜线之间)。如果您知道更好的方法,请告诉我。

答案 2 :(得分:0)

而不是正则表达式,我使用:

$str = "http://www.domain.tld/content/article/26849929.html";
$elem = explode('/', $str);
$elem[3] = 'replacement';
unset($elem[4]);
$str = implode('/', $elem);
echo $str,"\n";

<强>输出:

http://www.domain.tld/replacement/26849929.html