2017-05-11 74 views
0

我必须做在PHP的preg_replace如下:PHP的preg_replace

[some text][id]<a href='id'>some_text</a>其中id是一个整数

尝试下面的代替,可惜没有按预期工作:

preg_replace("/\[[^)]\]\[[0-9]+\]/","<a href='$2'>$1</a>",$string); 

此外,还可以考虑使用带额外支架的示例[some text]][id],其中应使用最后一个支架。

任何想法?

+0

对不起,已编辑。但是,函数的第一部分和第二部分不起作用 –

+0

您需要捕获要替换的内容才能在占位符中获取值。 – fpietka

+0

如果您知道解决方案,请将它添加到'Answer'中? –

回答

1

这里有一个解决方案:

$string = '[some text][117]'; 
$s = preg_replace("/\[([^\]]+)\]\[([0-9]+)\]/","<a href='$2'>$1</a>",$string); 
var_dump($s); 

首先 - 使用$1(或$2),你需要捕获括号()模式。

第二个错误 - 您正在尝试查找^),但您的文本中没有)。所以我把)换成]

更新一个额外]

$s = preg_replace("/\[([^\]]+)(\]?)\]\[([0-9]+)\]/","<a href='$3'>$1$2</a>",$string); 

不知道你需要这方面做的成立],所以我把它添加到链接文本。

在很多]]]的情况下,你可以使用:

$s = preg_replace("/\[([^\]]+)(\]*)\]\[([0-9]+)\]/","<a href='$3'>$1$2</a>",$string); 
+0

是的,我看到了我的错误。谢谢! –

+0

更新非常好!谢谢! –

+0

当我添加'htmlspecialchars($ string)'作为第三个参数时,它为什么不起作用?对于其他'preg_replace'函数它的工作。 –