preg_replace,如何仅替换括号内的模式匹配部分?

4

很抱歉,这个问题很基础,但我一直在查找有关 preg_replace 的所有信息,但仍然无法弄清楚... 我有一个类似于以下示例的大字符串:

  $string= '# tjs { fassdaf } #fsk { fssf} # fskff { casf }';

当我这样做时,它替换了整个模式,而不仅仅是我期望的 ( ) 中的部分。我想知道如何只替换 ( ) 中的部分。谢谢。

  $pattern= '/#.*tjs.*\{.*(.*)\}/imsU';
  $replacement= "test";
  $return_string = preg_replace ($string, $pattern, $replacement );

预期替换的字符串:

'# tjs {test} #fsk { fssf} # fskff { casf }';

你能同时发布预期的替换字符串吗? - kennytm
1个回答

4
$pattern= '/(#\s*tjs\s*\{\s*)(.*?)(\s*\})/imsU';
$replacement= "test";
$return_string = preg_replace($pattern,'$1'.$replacement.'$3',$string);

1
谢谢,现在我明白了。我在 PHP preg_replace 页面的一个示例中看到了 $1 和 $3 的提及,但他们使用了一些带有 { 的奇怪语法,我想那让我感到困惑。 - Rick
你可以使用\1和\3代替$1和$3。 - bcosca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接