0

在一个字符串中,每次有一个带有#的单词我想将这个单词保存在一个数组中,这里是我的代码:

<?php
function tag($matches)
{
    $hash_tag = array();
    $hash_tag[]=$matches[1];
    return '<strong>' . $matches[1] . '</strong>';
}
$test = 'this is a #test1 #test2 #test3 #test4 #test5 #test6';
$regex = "#(\#.+)#";
$test = preg_replace_callback($regex, "tag", $test);
echo $test;
?>

但我不知道如何将每个新单词放入数组 $hash_tag 的新单元格中,我真的需要帮助

4

4 回答 4

1

尝试使用preg_match_all ()

在一个数组中获得所有匹配项后,您可以循环遍历它。

于 2012-11-11T22:25:19.823 回答
1

我可以看到你想同时做两件事

  • 用强标签替换单词
  • 获取以后使用的所有单词

你可以试试

$hash_tag = array();
$tag = function ($matches) use(&$hash_tag) {
    $hash_tag[] = $matches[1];
    return '<strong>' . $matches[1] . '</strong>';
};

$test = 'this is a #test1 #test2 #test3 #test4 #test5 #test6';
$regex = "/(\#[0-9a-z]+)/i";
$test = preg_replace_callback($regex, $tag, $test);
echo $test;
var_dump($hash_tag); <------ all words now in this array 

输出

这是一个#test1 #test2 #test3 #test4 #test5 #test6

array (size=6)
  0 => string '#test1' (length=6)
  1 => string '#test2' (length=6)
  2 => string '#test3' (length=6)
  3 => string '#test4' (length=6)
  4 => string '#test5' (length=6)
  5 => string '#test6' (length=6)
于 2012-11-11T22:29:05.697 回答
0

好吧,这是正则表达式:/\#[a-zA-Z0-9]*/

在 PHP 中,我相信你会使用preg_match_all('/\#[a-zA-Z0-9]*/', string)

于 2012-11-11T22:27:49.460 回答
0

使用preg_match_all()并循环遍历所有匹配项:

<?php
$test = 'this is a #test1 #test2 #test3 #test4 #test5 #test6';
$regex = "(\#[^#]+?)";
preg_match_all($regex, $test, $hash_tag);
foreach ($hash_tag as $match) {
    echo '<strong>' . $match . '</strong>';
}
?>
于 2012-11-11T22:28:34.407 回答