如何将 url 的一部分更改为 preg_replace?

how change part of url by preg_replace?

我正在尝试将 html 的所有链接更改为 php preg_replace。所有的uris都有以下形式

test.com/item/16

我想改成:

test.com/z/item/16

我尝试了以下方法,但 returns 没有任何变化:

$links = 'http://test.com/item/16';
preg_replace("/item","z/item",$links);

echo $links; 
// output >>> http://test.com/z/item/16

正如@nickb 指出的那样,您必须使用定界符, /your_regular_expression// 是正则表达式的标准分隔符,因此,它是一个特殊字符,您必须使用反斜杠 \/ 转义要匹配的 /

preg_replace("/\/item/","z/item",$links);

但幸运的是,您可以选择自己的分隔符,例如 #,因此无需转义 /:

preg_replace("#/item#","z/item",$links);

这样做:

<?php
$links = 'http://test.com/item/16';
$a = preg_replace("/item/","z/item",$links);

echo $a;

preg_replace 不会更改输入字符串,而是 returns 修改后的字符串....存储在 $a 变量中..

您需要分隔符并将 preg_replace 的 return 设置为变量

$links = 'http://test.com/item/16';
$links = preg_replace('/\/item/','/z/item',$links);

echo $links; 

但是,为什么不在这种情况下只使用 str_replace?

所提供答案的问题是,如果 URL 中有多个 /item 实例,所有实例都将被替换,例如 URL,如:

http://items.domain.com/item/16

会搞砸,尝试只修改路径:

$path = parse_url( $url, PHP_URL_PATH );
$url  = str_replace( $path, '/z'.$path, $url );