Php 如何过滤字符串以提取符号后的文本?
我有一个函数,可以从标签中过滤文本Php 如何过滤字符串以提取符号后的文本?,php,regex,function,hash,Php,Regex,Function,Hash,我有一个函数,可以从标签中过滤文本 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 b
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, ',');
}
因此,在我的post文件中,变量使用gethashtags()来提取文本,但仅当字符串有一个#.#成为触发因素
我所需要的只是一个类似的函数,但使用@作为触发器,而不是散列
什么功能可以达到这个效果?我一点也不理解Regex的意思,所以如果这个问题像我尽力解释我的问题那样含糊不清,我很抱歉
提前感谢 我将简化您的函数,如下所示:
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
我建议/([@#][^^^^#]\S*)/g
获取所有内容。。和#
使用$sMatch{0}
可以检查@or#
或者移动“(“[]”后面以跳过它:-)输入,预期输出会更好。输入是一种可以输入任何内容的形式。例如,输入可以是“Hello everyone”,因此函数会忽略它,但输入也可以是“@Callum Hello!#hashtag”,因此函数必须提取两段文本(Callum和hashtag),以便将它们存储到数据库中。您的意思是,您能帮我将其放入类似于上述的函数中吗?我只需要
^.*.@(\S+).*$
部分我喜欢这个!非常感谢你@我很高兴能帮上忙。