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"
    )
)

ハッシュタグで始まる各単語の配列が 1 つだけ必要です。

4

4 に答える 4

14

これは /(?<!\w)#\w+/regxによって実行できます。

于 2012-11-30T05:22:03.303 に答える
3

それpreg_match_allがそうです。常に多次元配列を取得します。[0]は完全一致であり[1]、最初のキャプチャ グループの結果リストです。

$matches[1]目的の文字列にアクセスするだけです。(描写された余分なものを含むダンプArray ( [0] => Array ( [0]は正しくありませんでした。1 つのサブアレイ レベルが得られます。)

于 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 に答える