我想使用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]不区分大小写。
答案 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>."