preg_replace和'[',']'和'/'的组合用于替换

时间:2012-02-15 11:20:06

标签: php regex preg-replace

我想使用preg_replace来组合'[',']'和'/',但我找不到正确的方法!

我有这些字符串:

$str = "This is a [u]PHP[/u] test . This is second[/u] test.
 This [u]is another [u]test[/u].";

$url = "http://www.test.com";

结果我希望:

str1 = "This is a <a href='http://www.test.com'>PHP</a> test . 
 This is second[/u] test.
This <a href='http://www.test.com'>is another [u]test</a>.";

以及[u] = [U],[/ u] = [/ U]不区分大小写。

3 个答案:

答案 0 :(得分:1)

假设[u]标签内没有开口方括号:

preg_replace('~\[u\]([^[]+)\[/u\]~i', '<a href="'.$url.'">$1</a>', $str);

正则表达式解释说:

  • ~用作分隔符以避免leaning slash syndrome
  • \[\]匹配文字方括号
  • ()表示替换字符串中的捕获组$1
  • [^[]+匹配除了一个或多个开头方括号之外的任何内容
  • i修饰符使正则表达式不区分大小写。

答案 1 :(得分:1)

嗯,我想你想要的是

$str = "This is a [u]PHP[/u] test . This is second[/u] test.
 This [u]is another [u]test[/u].";

$url = "http://www.test.com";

echo preg_replace('#\[u\]((?:(?!\[/u\]).)*)\[/u\]#is',"<a href='{$url}'>\\1</a>",$str);

((?:(?!\[/u\]).)*)表示它会匹配一些不包含字符串'[/ u]'

的字符

答案 2 :(得分:1)

$str1 = preg_replace('#\[(u|U)\](.*?)(?=\[/\1)\[/\1\]#', "<a href='http://www.test.com'>$2</a>", $str);
var_dump($str, $str1);

输出

string(85) "This is a [u]PHP[/u] test . This is second[/u] test.
 This [u]is another [u]test[/u]."
string(139) "This is a <a href='http://www.test.com'>PHP</a> test . This is second[/u] test.
 This <a href='http://www.test.com'>is another [u]test</a>."