我有这段代码:
$str=preg_replace(
'#\b[^"](Hello User)#',
'<a href="$1">$1</a>',
$str);
return nl2br($str);
所以,我想替换Hello User
的{{1}}的所有出现。{/ 1}}。
例如,使用字符串:
"
我会看到这个结果:
Hello User\n
"Hello User\n
Hello User\n
"Hello User"\n
但实际上输出正好相反:
<a href="Hello User">Hello User</a><br />
"Hello User<br />
<a href="Hello User">Hello User</a><br />
"Hello User"<br />
为什么呢?我该如何解决这个问题?
修改
您可以在此处查看示例http://codepad.org/2Q466lx2
答案 0 :(得分:2)
原因是[^"]
期望匹配一个字符(除了"
之外的任何字符)。由于您的第一个Hello User
位于字符串的开头,因此失败。
使用负面的lookbehind断言:
$str=preg_replace(
'#(?<!")(Hello User)#',
'<a href="$1">$1</a>',
$str);
仅当Hello User
前面没有"
时,才匹配{{1}}。
答案 1 :(得分:1)
功能htmlentities()将"
转换为"
尝试:
#(?<!")(Hello User)#