str_replace 对于多个项目,然后将结果存储在新变量中

str_replace for multiple items then store results in new variable

我有这样的字符串:

 $content = 'Hi @steve, have you seen what @dave wrote?';

我基本上只想定位直接跟在 @ 符号后面的词(比如 Twitter 提及),然后遍历每个结果执行与它们一起执行的任务。

我知道如何从整个字符串中去除 @ 字符:

$strip_at = str_replace( '@', '', $content );

这将导致 $strip_at 为:

Hi steve, have you seen what dave wrote?

但是我如何使用 str_replace 定位每个 "mention",删除只留下单词(在本例中为名称)的 @ 符号,然后存储每个 [=30] 的结果=] 数组中的新变量?

想要的结果:

$mentions = array('steve','dave');

所以我可以循环 $mentions 并对结果进行处理,例如:

foreach ($mentions as $mention) {
   echo 'This persons name is '.$mention.'<br />';
}

您可以通过正则表达式完成此操作:

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(推特名称的最大长度)的单词

所以我们一起匹配 @ 符号后的 Twitter 用户名。