使用php preg_replace_callback - 但替换整个字符串而不是每个子字符串

时间:2013-10-15 17:38:03

标签: php regex preg-replace

嗨,我希望有人可以提供帮助,因为对正则表达式不太热。

获得如下脚本片段..

<?php

$news="test message {image=abc} more text text text {image=def}";

$news=preg_replace_callback("/\{image=.*\}/i",function ($matches) { $field=$matches[0];  return "*".$field."*"; }, $news);


echo $news;

?>

然而,当我运行它时,它会返回

test message *{image=abc} more text text text {image=def}*

相反,我希望它返回..

test message *{image=abc}* more text text text *{image=def}*

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

使用non-greedy代替.*?制作正则表达式.*

$news = "test message {image=abc} more text text text {image=def}";
$news = preg_replace_callback("/\{image=.*?\}/i",function ($matches) { 
                 return "*".$matches[0]."*"; }, $news);

echo $news;

<强>输出

test message *{image=abc}* more text text text *{image=def}*

答案 1 :(得分:1)

为何回调?

$news = preg_replace("/(\{image=[^\}]+\})/i", "*$1*", $news);