我有一个可以过滤标签
中文本的功能function gethashtags($text)
{
//Match the hashtags
preg_match_all('/(^|[^a-z0-9_])#([a-z0-9_]+)/i', $text, $matchedHashtags);
$hashtag = '';
// For each hashtag, strip all characters but alpha numeric
if(!empty($matchedHashtags[0])) {
foreach($matchedHashtags[0] as $match) {
$hashtag .= preg_replace("/[^a-z0-9]+/i", "", $match).',';
}
}
//to remove last comma in a string
return rtrim($hashtag, ',');
}
所以在我的帖子文件中,变量使用gethashtags()来提取文本,但前提是字符串有#。 #是触发器。
我需要的只是一个类似的函数,但使用@作为触发器而不是哈希。
什么功能可以达到这个效果?我不明白正则表达式,所以我很抱歉,如果这个问题模糊不清,我会尽最大努力解释我的问题。
先谢谢!
答案 0 :(得分:1)
我会像这样简化你的功能:
function gethashtags($text) {
preg_match_all('/\B[@#]\K\w+/', $text, $matches);
return implode(',', $matches[0]);
}
echo gethashtags("@Callum Hello! #hashtag @another #hashtag");
<强>解释强>:
(^|[^a-z0-9_])
部分就像非字边界\B
一样。@
或#
字符。 \K
抛弃了与此相匹配的所有内容。<强>输出强>
Callum,hashtag,another,hashtag
答案 1 :(得分:1)
我建议/([@#][^@^#]\S*)/g
获取所有@ ..和#..
http://regex101.com/r/gD2oI8/2
使用$sMatch{0}
,您可以查看@或#
或者移动“[]”后面的“(”)跳过它: - )