到目前为止,我尝试用锚标记替换所有出现@提及的地方:
$comment = preg_replace('/@([^@ ])? /', '<a href="/$1">@$1</a> ', $comment);取以下示例字符串:
"@name kdfjd fkjd as@name @ lkjlkj @name"到目前为止,一切都匹配正常,但我想忽略那个"@“符号。我尝试在"^@“后面使用"+”和"{2,}“,我认为这将强制执行最小数量的匹配,但它不起作用。
发布于 2012-04-30 21:02:30
替换问号(?)量词("optional"),并在字符类后面添加一个+ ("one or more"):
@([^@ ]+)发布于 2012-04-30 21:08:50
正则表达式
(^|\s)(@\w+)可能就是你要找的东西。
它基本上是指,行的开始,或者一个空格,然后是一个@符号,后面跟着一个或多个单词字符。
例如。
preg_match_all('/(^|\s)(@\w+)/', '@name1 kdfjd fkjd as@name2 @ lkjlkj @name3', $result);
var_dump($result[2]);为您提供
Array
(
[0] => @name1
[1] => @name3
)发布于 2015-09-30 10:44:42
我喜欢Petah的回答,但我稍微调整了一下
preg_replace('/(^|\s)@([\w.]+)/', '$1<a href="/users/$2">@$2</a>', $text);主要区别是:
@符号。这只是为了显示,不应该在网址中出现.字符(注意:\w包含下划线)$1以保留空白https://stackoverflow.com/questions/10384136
复制相似问题