我試圖在評論文本中找到@username的每個實例並將其替換爲一個鏈接。這裏是我的PHP至今:正則表達式匹配空格或字符串結尾
$comment = preg_replace('/@(.+?)\s/', '<a href="https://stackoverflow.com/users/${1}/">@${1}</a> ', $comment);
唯一的問題是正則表達式是取決於有作爲@username引用後的空格。任何人都可以幫助我調整它,如果它在字符串的末尾,它也會匹配嗎?
我試圖在評論文本中找到@username的每個實例並將其替換爲一個鏈接。這裏是我的PHP至今:正則表達式匹配空格或字符串結尾
$comment = preg_replace('/@(.+?)\s/', '<a href="https://stackoverflow.com/users/${1}/">@${1}</a> ', $comment);
唯一的問題是正則表達式是取決於有作爲@username引用後的空格。任何人都可以幫助我調整它,如果它在字符串的末尾,它也會匹配嗎?
嘗試/@(\w+)/
而不是/@(.+?)\s/
。
要檢測空白或字符串的結尾,你會用:/@(.+?)(?=\s|$)/
,但除非你的用戶名包含非字母數字字符,它更簡單使用\w
進行文字字符或\b
一個字斷,即:/@(.+?)\b/
或/@(\w)+/
。
優秀 - 完美運作!你能告訴我更多關於\ w的嗎? – 2010-03-22 07:07:44
@Kirk:\ w只需匹配任何'word'字符:A-Za-z0-9_ – animuson 2010-03-22 07:09:08