正则表达式,保存数组中的值

时间:2012-11-11 22:21:27

标签: php regex callback

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

<?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 个答案:

答案 0 :(得分:1)

尝试使用preg_match_all()

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

答案 1 :(得分: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)

答案 2 :(得分:0)

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

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

答案 3 :(得分: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>';
}
?>