-2

我有一个像<div><center>[content]</center></div>. “[内容]”被替换为从数据库插入内容的 php 脚本。我已经通过使用 str_replace 函数解决了这个问题。现在我想像这样修改我的脚本:如果我输入 [content] 它应该替换它。如果我写 [[content]] 它不应该做任何事情。我考虑过使用正则表达式,但无论我尝试什么 -> 它都不起作用。如果你不明白我的意思,回想一下 c#, java,...:如果我输入 \n,它是一个换行符。如果我输入 \n 它的“\n”。如果有人可以提供帮助,我将非常感激。

看看这个例子:

"aa[content]aa" -> aaMYCONTENTaa
"aa[[content]]aa" -> aa[[content]]aa
"aa[[[content]]]aa" -> aa[MYCONTENT]aa
4

3 回答 3

1

编辑:

代码将替换[content]$replace_content_with值,除非它[之前或]之后

$original = '<div><center>[content]</center></div>';
$replace_content_with = 'my new content'; 
$pattern = '/([^\[])\[content\]([^\]])/i';
$new_data = preg_replace($pattern, '\1'.$replace_content_with.'\2', $original);
echo $new_data; //print <div><center>my new content</center></div>

请注意,如果您的替换内容包含\[SOME NUMBER]在其中 - 它可能无法按预期工作

于 2013-04-27T15:10:46.097 回答
1

纯正则表达式解决方案是可能的,但您正走在构建自己的模板引擎的危险道路上。有几种可用的解决方案(smarty是最流行的一种)

<?php
$str = preg_replace('([^\[]?)\[content\]([^\]]?)', '\1' . $yourcontent . '\2', $str);
?>

解释:[^\\[]?匹配除[字符以外的所有内容,包括任何内容。这意味着[[content]]不匹配。

于 2013-04-27T15:02:43.907 回答
0

只需将 '>[content]<' 替换为 '>whatever you want<'

于 2013-04-27T14:59:41.977 回答