自定义标记,preg_replace仅限于1

时间:2012-11-08 01:04:45

标签: php function preg-replace

PHP功能:

function b($text) {    
  $body="<b>$text</b>";
  return $body; 
}

Preg_Replace:

function replaceTags($body) {    
  $body = preg_replace('!\[b](.*?)\[\/b\]!Uei', "''.b('$1','$2').''", $body, -1);    
  return $body; 
}    

代码在某种程度上有效。它显然每次都只限于第一次。当我复制代码时,我不小心打破了这个问题,将它插入到彼此中,并以粗体显示内部标记。

示例:

*Code:* [b]This is Hi.[/b] Hello world. [b]This is Hi2.[/b]    
*Output:* **This is Hi.[/b] Hello world. [b]This is Hi2.**

我刚开始使用 preg_replace 。我认为这种模式略有偏差或可能缺少一些东西。这就是为什么它只显示第一个实例。我也尝试过使用MySQL查询,并且只限于一行。

我正在尝试为用户端使用简单的标记,但我想将MySQL查询用作自定义标记(再次,可以工作,但只显示第一条记录),如果需要的话。

感谢。非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

从正则表达式中删除U模式修饰符。它inverts惰性运算符的含义并使其成为greedy。如果您想支持UTF-8,请使用u(小写)

$body = preg_replace('!\[b\](.*?)\[\/b\]!uei', "''.b('$1','$2').''", $body, -1);