使用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);
如果有人能够指出最短,最有效的方式,我将不胜感激。谢谢!
答案 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