7

我有一个包含哈希标签的字符串,我正在尝试将标签拉出我认为我非常接近但得到了一个具有相同结果的多维数组

  $string = "this is #a string with #some sweet #hash tags";

     preg_match_all('/(?!\b)(#\w+\b)/',$string,$matches);

     print_r($matches);

产生

 Array ( 
    [0] => Array ( 
        [0] => "#a" 
        [1] => "#some"
        [2] => "#hash" 
    ) 
    [1] => Array ( 
        [0] => "#a"
        [1] => "#some"
        [2] => "#hash"
    )
)

我只想要一个数组,每个单词都以哈希标记开头。

4

4 回答 4

14

这可以通过正则 /(?<!\w)#\w+/表达式来完成,它会起作用

于 2012-11-30T05:22:03.303 回答
3

就是preg_match_all这样。你总是得到一个多维数组。[0]是完整匹配和[1]第一个捕获组结果列表。

只需访问$matches[1]所需的字符串。(带有所描述的无关的转储Array ( [0] => Array ( [0]是不正确的。您得到一个子数组级别。)

于 2012-11-30T05:25:02.717 回答
2

我认为这个功能会帮助你:

echo get_hashtags($string);

function get_hashtags($string, $str = 1) {
    preg_match_all('/#(\w+)/',$string,$matches);
    $i = 0;
    if ($str) {
        foreach ($matches[1] as $match) {
            $count = count($matches[1]);
            $keywords .= "$match";
            $i++;
            if ($count > $i) $keywords .= ", ";
        }
    } else {
        foreach ($matches[1] as $match) {
            $keyword[] = $match;
        }
        $keywords = $keyword;
    }
    return $keywords;
}
于 2014-03-30T22:34:25.387 回答
1

尝试:

$string = "this is #a string with #some sweet #hash tags";
preg_match_all('/(?<!\w)#\S+/', $string, $matches);
print_r($matches[0]);
echo("<br><br>");

// Output: Array ( [0] => #a [1] => #some [2] => #hash )
于 2016-03-17T02:57:38.557 回答