2009-08-25 13 views
1

我有以下字符串:PHP正則表達式幫助主題標籤

$str = '#hello how are #you and #you and #you'; 

我想環繞那些有散列標籤在他們面前,爲exampe一些HTML代碼:

echo preg_replace("/#([A-Za-z0-9_]+)(?=)/", "<a href='http://url.com/$1'>$0</a>", $str); 

這將輸出:

#hello如何#you#you和#你

請注意,每個URL鏈接都沒有鏈接中的哈希標記。

但是,這是我的問題,因爲在最後一個#末尾沒有空格,它與正則表達式不匹配,顯然不包含在內。我不知道該怎麼做,因爲有些可能有空格後,有些可能不會,但我不想在輸出中包含空格(因此(?=)),但我不知道我還有什麼可以做。

任何幫助將不勝感激。

預先感謝

回答

3

使用(\ S | \ Z)這將匹配空格或結束的行

+0

哇,謝謝你的快速和非常好的答案。我對它做了一個修改,使其不包含返回的url中的空白,所以最終的正則表達式是: /@([A-Za-z0-9 _] +)(?= \ s | \ Z)/ 完美,非常感謝ennuikiller。有什麼我可以爲你做的,作爲感謝的姿態嗎? – 2009-08-25 17:39:29

+0

@jamie你的欣賞是綽綽有餘!也許你會回答我的一個問題,而不是時間! – ennuikiller 2009-08-25 17:41:52

+0

我的意思是「下一個」的時間! – ennuikiller 2009-08-25 17:42:45

1

可以切換選擇器排除模式,例如([^, 。] +)。因此應該適用於所有的實例。

+0

感謝您的回答,我也嘗試過這種方法,並且也可以和上面的正則表達式一樣工作(請參見上面的回答中的註釋)。 再次感謝您的快速響應! – 2009-08-25 17:41:00