2011-05-15 125 views
1

我有这样的代码:为什么这个正则表达式不排除这个词?

$str=preg_replace(
    '#\b[^"](Hello User)#',   
    '<a href="$1">$1</a>', 
    $str); 
return nl2br($str); 

所以,我想,以取代Hello User每OCCURENCES这并不与"开始。

例如用绳子:

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 /> 

但实际上输出是相反的:

Hello User<br /> 
"<a href="Hello User">Hello User</a><br /> 
Hello User<br /> 
"<a href="Hello User">Hello User</a>"<br /> 

为什么?我该如何解决这个问题?

编辑

你可以看到一个例子在这里http://codepad.org/2Q466lx2

回答

2

的原因是[^"]预计将匹配字符(任何东西,但")。由于您的第一个Hello User位于字符串的起始位置,因此失败。

使用负向后断言,而不是:

$str=preg_replace(
    '#(?<!")(Hello User)#',   
    '<a href="$1">$1</a>', 
    $str); 

这符合Hello User,只有当它不是由"之前。

+0

严正没有!使用这个所有你好用户被替换:O – kwichz 2011-05-15 16:10:38

+0

蒂姆的解决方案在这里工作 – LeleDumbo 2011-05-15 16:26:22

+0

真的吗?不,它不起作用(或者你误解我的问题:))。请检查一下这个http://codepad.org/2Q466lx2:最后一个''Hello User'(前面加''')匹配:O – kwichz 2011-05-15 16:43:23

1

功能ヶ辆()转换"&quot;尝试:

#(?<!&quot;)(Hello User)# 
相关问题