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

时间:2015-11-19 18:48:32

标签: php arrays variables str-replace

我有一个这样的字符串:

 $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 />';
}

1 个答案:

答案 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的单词(推特名称的最大大小)

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