首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在字符串中查找@提及

在字符串中查找@提及
EN

Stack Overflow用户
提问于 2012-04-30 20:59:28
回答 6查看 3.2K关注 0票数 6

到目前为止,我尝试用锚标记替换所有出现@提及的地方:

代码语言:javascript
运行
复制
$comment = preg_replace('/@([^@ ])? /', '<a href="/$1">@$1</a> ', $comment);

取以下示例字符串:

代码语言:javascript
运行
复制
"@name kdfjd fkjd as@name @ lkjlkj @name"

到目前为止,一切都匹配正常,但我想忽略那个"@“符号。我尝试在"^@“后面使用"+”和"{2,}“,我认为这将强制执行最小数量的匹配,但它不起作用。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-30 21:02:30

替换问号(?)量词("optional"),并在字符类后面添加一个+ ("one or more"):

代码语言:javascript
运行
复制
@([^@ ]+)
票数 10
EN

Stack Overflow用户

发布于 2012-04-30 21:08:50

正则表达式

代码语言:javascript
运行
复制
(^|\s)(@\w+)

可能就是你要找的东西。

它基本上是指,行的开始,或者一个空格,然后是一个@符号,后面跟着一个或多个单词字符。

例如。

代码语言:javascript
运行
复制
preg_match_all('/(^|\s)(@\w+)/', '@name1 kdfjd fkjd as@name2 @ lkjlkj @name3', $result);
var_dump($result[2]);

为您提供

代码语言:javascript
运行
复制
Array
    (
        [0] => @name1
        [1] => @name3
    )
票数 7
EN

Stack Overflow用户

发布于 2015-09-30 10:44:42

我喜欢Petah的回答,但我稍微调整了一下

代码语言:javascript
运行
复制
preg_replace('/(^|\s)@([\w.]+)/', '$1<a href="/users/$2">@$2</a>', $text);

主要区别是:

  • 不包括@符号。这只是为了显示,不应该在网址中出现
  • 允许.字符(注意:\w包含下划线)
  • 在替换中,我在开头添加了$1以保留空白
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10384136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档