2013-03-05 52 views

回答

2

你必须使用正则表达式来做到这一点

$line = preg_replace('~\\[a +href=\'([^\']+)\'\\]([^\\[]+)\\[/a\\]~', '<a href="$1">$2</a>', $line); 
+2

“你必须使用正则表达式”不,你不需要。 – 2013-03-05 13:23:13

+0

如果他只是想做到这一点,这是最快的方式 - 当然,你可以有不同的东西 – Philipp 2013-03-05 13:24:16

+0

嗯......一旦你得到嵌套标签,你很可能会想要。当然,这不是你真的需要......你也可以编写一个编译器。 – Mchl 2013-03-05 13:24:22

7

为什么不直接使用:

$search = array('[', ']'); 
$replace = array('<', '>'); 

$line = str_replace($search, $replace, $line); 
+0

将工作简单案件。一旦你在'url'或'link'中获得'[]',它就会失败(通过替换太多) – Mchl 2013-03-05 13:26:27

+0

你是对的,但是OP要求一个特定的用例。如果他真的只需要这样做,这种方法可能比正则表达式更容易阅读。 – acme 2013-03-05 13:31:43

+0

当然。你的回答实际上是正确的,仅限于简单的情况(对于OP需要这可能是足够的)。 – Mchl 2013-03-05 13:33:11

1

只需使用

$string = str_replace(array('[', ']'), array('<', '>'), $string); 
0

试试这个:

$str = "[a href='url']link[/a]"; 
$new_str = preg_replace('/\[a href=\'(.*)\'\](.*)\[\/a\]/','<a href=\'$1\'>$2</a>',$str); 
echo $new_str;