0

我有一个这样的网址:

http://Example.com/mobile-ds-cams/mobile-gg-cams/ddd-webcams

例子:

$pattern = '/http://Example.com/(\w+)/(\w+)/(\w+)/i';               
$replacement="http://Example.com/$2/$3";
$appUrl= preg_replace($pattern, $replacement, $appUrl);

我想要实现的是这个

http://Example.com/mobile-gg-cams/ddd-webcams

我试图保留 2 个“子 URL”而不是 3 个。但它不起作用..为什么?

4

3 回答 3

3

您需要在模式中转义正斜杠,或使用不同的模式分隔符。

$pattern = '/http:\/\/Example\.com\/(\w+)\/(\w+)\/(\w+)/i';               

$pattern = '#http://Example\.com/(\w+)/(\w+)/(\w+)#i';               
于 2012-05-08T12:45:05.370 回答
0

像这样转义斜线:

$pattern = '/http:\/\/Example.com\/(\w+)\/(\w+)\/(\w+)/i';               
$replacement="http://Example.com/$2/$3";
$appUrl= preg_replace($pattern, $replacement, $appUrl);
于 2012-05-08T12:46:50.800 回答
0

它无法正常工作,因为您的表达式在正则表达式中包含未正确引用的具有特殊含义的字符。

要 100% 确定,请preg_quote像这样使用:

$url = 'http://Example.com/'
$pattern = preg_quote($url.'{word}/{word}/{word}', '/');
$pattern = str_replace($pattern, '{word}', '(\w+)');
$pattern = "/$pattern/i";
$replacement = $url.'$2/$3';
$appUrl= preg_replace($pattern, $replacement, $appUrl);

否则,太容易出错了。例如,当前发布在这里的所有其他答案都出错了,因为它们没有正确地转义.in Example.com。如果你给他们一个像 eg 这样的字符串,你可以自己测试一下http://Example!com,其中!可以是你喜欢的任何字符。

此外,您正在使用字符串,例如$2在双引号字符串文字中,这在 PHP 中不是一个好主意,因为恕我直言,它很容易被带走。最好将其单独引用并确保安全。

于 2012-05-08T12:48:50.047 回答