我正在尝试在评论文本中找到@username的每个实例,并将其替换为链接。这是我到目前为止的PHP:
$comment = preg_replace('/@(.+?)\s/', '<a href="/users/${1}/">@${1}</a> ', $comment);
唯一的问题是正则表达式依赖于@username引用之后的空格。任何人都可以帮我调整一下,如果它在字符串的末尾也会匹配吗?
答案 0 :(得分:13)
要检测空格或字符串结尾,您可以使用:/@(.+?)(?=\s|$)/
,但除非您的用户名包含非字母数字字符,否则使用\w
字符或\b
更为简单用于分词,即:/@(.+?)\b/
或/@(\w)+/
。
答案 1 :(得分:9)
尝试/@(\w+)/
而不是/@(.+?)\s/
。