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

10

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

$comment = preg_replace('/@(.+?)\s/', '<a href="/users/${1}/">@${1}</a> ', $comment);
唯一的问题是该正则表达式要求在@用户名引用后面有空格。有人能帮我调整它,使其也能匹配字符串末尾吗?
2个回答

13
为了检测空格或字符串结束,您可以使用: /@(.+?)(?=\s|$)/,但是,除非您的用户名包含非字母数字字符,否则更简单的方法是使用\w 表示单词字符或 \b 表示单词分界点,例如:/@(.+?)\b//@(\w)+/

或者我们可以使用它来确定是否在链接末尾添加空格吗?$comment = preg_replace('/@(.+?)(?:\s|$)/', '<a href="/users/${1}/">@${1</a>}${2}', $comment); - animuson
是的,但在这种情况下,您必须使用捕获组(删除“:?”)。 - Max Shawabkeh
这真的非常有帮助!感谢修复空白字符。 - Kirk Ouimet
(?=\s|$) 对于正则表达式挑战的人来说是一个非常大的帮助!感谢您提供这个技巧。 - Kalle H. Väravas

9
尝试使用/@(\w+)/代替/@(.+?)\s/

太棒了 - 它完美地运行了!你能告诉我更多关于 \w 的信息吗? - Kirk Ouimet
1
@Kirk:\w可以匹配任何“单词”字符:A-Za-z0-9_。 - animuson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接