为什么preg_match_all()多次创建相同的答案?

时间:2012-08-20 01:54:16

标签: php preg-match-all

以下代码从推文中提取#hashtags并将它们放入变量$ matches。

$tweet = "this has a #hashtag a  #badhash-tag and a #goodhash_tag";

preg_match_all("/(#\w+)/", $tweet, $matches);

var_dump( $matches );

有人可以向我解释为什么以下结果有 2个相同的数组而不只是1

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(8) "#hashtag"
    [1]=>
    string(8) "#badhash"
    [2]=>
    string(13) "#goodhash_tag"
  }
  [1]=>
  array(3) {
    [0]=>
    string(8) "#hashtag"
    [1]=>
    string(8) "#badhash"
    [2]=>
    string(13) "#goodhash_tag"
  }
}

3 个答案:

答案 0 :(得分:11)

因为您使用()来捕获子组。

尝试:

preg_match_all("/#\w+/", $tweet, $matches);

答案 1 :(得分:0)

为什么你要使用(),除非你想让它完全这样做。大声笑抱歉,这不是那么友好:(

http://php.net/manual/en/function.preg-match-all.php示例3

答案 2 :(得分:0)

简单:

从表达式中删除()

希望它有所帮助。