2011-05-15 114 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)# 
相關問題