0

私の目標は、ハッシュタグを含む文字列を取得し、すべてのハッシュタグを返すことです。

私の機能:

function get_hashtags($text)
{
    preg_match("/(^|\s)#(\w*[a-zA-Z_]+\w*)/", $text, $matches);
    return $matches;

}

現在、私が試したとき

$text = "yay this is #my comment and it's #awesome and cool";
$tag = get_hashtags($text);
print_r($tag);

私は得る: 配列 ( [0] => #my [1] => [2] => my )

次のような配列を返したいだけです

array('tag1', 'tag2', 'tag3');

実際の # なし

私は何を間違っていますか?どうすれば修正できますか?

ありがとうございました

編集:誰かが回答を投稿しましたが、それは消えました。それはまさに私が望んでいたものですが、今ではエラー、コードが表示されます:

function get_hashtags($text)
{
    $matches = array();
    preg_match_all("/(^|\s)#(\w*[a-zA-Z_]+\w*)/", $text, $matches);
    $result = array();
    foreach ($matches as $match) {
        $result[] = $match[2];
    }
    return $result;


}

エラー: 未定義のオフセット: 2

どうすれば修正できますか?

4

3 に答える 3

5

preg_match_allを使用してみてください

$text = "yay this is #my comment and it's #awesome and cool";
preg_match_all("/(^|\s)#(\w*[a-zA-Z_]+\w*)/", $text, $matches); // updated to use original regex

var_dump($matches[1]);
于 2012-09-26T21:00:49.830 に答える
0
preg_match_all('/(?<=\#)[^\s]+/', $text, $matches);

指定した$text値の場合$matches[0]、ハッシュに一致するネガティブルックビハインドを使用してハッシュの後の単語のみが含まれますが、結果からは除外されます。

基本的に何にでも置き換えることができるセクション[^\s]+。この例では、空白以外の文字に一致します。単語文字とアンダースコアのみに一致する必要がある場合は、Timの例を使用できます。[a-zA-Z_]+

于 2012-09-26T21:15:58.473 に答える
0

preg_match_allすべてのタグを元に戻したい場合に使用する必要があります。preg マッチング関数が機能する方法は、常に完全な一致とキャプチャしようとしているものを返すため、直接返すことはできません$matches

function get_hashtags($text)
{
    preg_match_all("/(^|\s)#(\w*[a-zA-Z_]+\w*)/", $text, $matches);

    return $matches[2];

}
于 2012-09-26T21:00:59.283 に答える