-2

可能重复:
php regex <b> 到 <b>

在我的管理面板中,我有一个文本区域,员工可以在其中向客户插入消息。

我想[[p=304_red]]在返回中转换并检测到两个匹配项。我在想 str_replace 但我不能做两次。此外,str_replace 将被限制为一个,工作人员可能会添加两次。任何人都推荐一个更好的解决方案(preg_replace 似乎很棘手和混乱)

[[p=304_red]] 

应该返回

<a href="http://site.com/jump?go=304_red">
<img src="http://cdn.com/304_red/large/1.jpg" />
</a>

我的代码只返回 URL。

$question = $_GET['replyBoxField'];
$question = str_replace("[[p=", "<a href='http://site.com/jump?go='>", $question);
$question = str_replace("]]", "</a>", $question);
4

3 回答 3

3

简单的正则表达式应该在这里为您工作。

$question = preg_replace('@\[\[p=([^\]]+)\]\]@i', '<a href="http://site.com/jump?go=$1"><img src= "http://cdn.com/$1/large/1.jpg" ></a>', $question);

=)

于 2012-05-23T13:01:29.817 回答
0

正则表达式不是更好的方法吗?

$filter = "/\[\[p=([^\]\s]+)\]\]/";
$transform = "<a href='http://site.com/jump?go=$1'><img src='http://cdn.com/$1/large/1.jpg' /></a>";

$string = preg_replace($filter, $transform, $string);
于 2012-05-23T13:02:19.520 回答
-1

所有其他答案都错了,请参阅:

将您的 BBCode 更改为此[[p=304_sapphire]#[304_sapphire]]

$question = str_replace("[[p=", "<a href='http://domain.com/jump?go=", $question);
$question = str_replace("]#[", "'><img src='http://cdn.com/files/", $question);
$question = str_replace("]]", "/1/small.jpg'/></a>", $question);
于 2012-05-23T13:03:56.337 回答