3

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

得到一个脚本片段如下..

<?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}*

谢谢你的帮助。

4

2 回答 2

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}*
于 2013-10-15T17:41:01.440 回答
1

为什么要回调?

$news = preg_replace("/(\{image=[^\}]+\})/i", "*$1*", $news);
于 2013-10-15T17:46:16.843 回答