2010-03-22 219 views
9

我試圖在評論文本中找到@username的每個實例並將其替換爲一個鏈接。這裏是我的PHP至今:正則表達式匹配空格或字符串結尾

$comment = preg_replace('/@(.+?)\s/', '<a href="https://stackoverflow.com/users/${1}/">@${1}</a> ', $comment); 

唯一的問題是正則表達式是取決於有作爲@username引用後的空格。任何人都可以幫助我調整它,如果它在字符串的末尾,它也會匹配嗎?

回答

8

嘗試/@(\w+)/而不是/@(.+?)\s/

+0

優秀 - 完美運作!你能告訴我更多關於\ w的嗎? – 2010-03-22 07:07:44

+1

@Kirk:\ w只需匹配任何'word'字符:A-Za-z0-9_ – animuson 2010-03-22 07:09:08

13

要檢測空白或字符串的結尾,你會用:/@(.+?)(?=\s|$)/,但除非你的用戶名包含非字母數字字符,它更簡單使用\w進行文字字符或\b一個字斷,即:/@(.+?)\b//@(\w)+/

+0

或者我們可以使用它來確定是否在鏈接的末尾添加一個空格? '$ comment = preg_replace('/ @(。+?)(?:\ s | $)/','@${1} $ {2}',$ comment);' – animuson 2010-03-22 07:08:34

+0

是的,但在這種情況下,您必須使用一個捕獲組(刪除'?:')。 – 2010-03-22 07:10:44

+0

這實際上非常有幫助!感謝空白修復程序 – 2010-03-25 04:11:09

相關問題