我有一个这样的字符串:
$content = 'Hi @steve, have you seen what @dave wrote?';
我基本上只想找到@符号后面的单词(比如twitter提及),然后遍历每个执行任务的结果。
我知道如何从整个字符串中删除@ char:
$strip_at = str_replace( '@', '', $content );
哪会导致$ strip_at为:
Hi steve, have you seen what dave wrote?
但是我如何使用str_replace来定位每个"提及",删除@符号,只留下单词(在这种情况下为名称),然后存储每个"提及&#的结果34;在数组中的新变量?
期望的结果:
$mentions = array('steve','dave');
因此,我可以循环使用$ mentions并对结果进行处理,例如:
foreach ($mentions as $mention) {
echo 'This persons name is '.$mention.'<br />';
}
答案 0 :(得分:2)
您可以通过正则表达式完成此操作:
preg_match_all('/(?<=@)(\w){1,15}/', $content, $results);
将把这个数组存储在变量$results
:
[
[
"steve",
"dave",
],
]
您可以通过循环$results[0]
来枚举匹配项:
foreach($results[0] as $name) {
echo $name . '<br>';
}
打印:
steve
dave
如果您对/(?<=@)(\w){1,15}/
的含义感到好奇:
(?<=@)
- “lookbehind” - 这意味着我们需要@
在我们真正感兴趣的匹配之前
(\w){1,15}
表示匹配最大长度为15的单词(推特名称的最大大小)
所以我们一起匹配@符号后面的推特用户名。