正则表达式匹配空格或字符串结尾

时间:2010-03-22 07:04:36

标签: php regex preg-replace

我正在尝试在评论文本中找到@username的每个实例,并将其替换为链接。这是我到目前为止的PHP:

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

唯一的问题是正则表达式依赖于@username引用之后的空格。任何人都可以帮我调整一下,如果它在字符串的末尾也会匹配吗?

2 个答案:

答案 0 :(得分:13)

要检测空格或字符串结尾,您可以使用:/@(.+?)(?=\s|$)/,但除非您的用户名包含非字母数字字符,否则使用\w字符或\b更为简单用于分词,即:/@(.+?)\b//@(\w)+/

答案 1 :(得分:9)

尝试/@(\w+)/而不是/@(.+?)\s/