PHP

twitter ハッシュタグ メンション を 正規表現で取得 php

いろいろなところに情報あるけど、改行がバグったりしてうまく動かない。
ということで今回は

・マッチしたものを取得したい
・マッチしたものを置き換えたい

の2つしたいので、処理を別にする。

まずは正規表現でハッシュタグ、メンションをそれぞれ取得

function getHashtags($tweet)
{
    $matches = array();
    preg_match_all('/#(w*[一-龠_ぁ-ん_ァ-ヴーa-zA-Za-zA-Z0-9]+|[a-zA-Z0-9_]+|[a-zA-Z0-9_]w*)/', $tweet, $matches);

    return $matches[0];
}

function getMentiontags($tweet)
{
    $matches = array();
    preg_match_all('/@(w*[一-龠_ぁ-ん_ァ-ヴーa-zA-Za-zA-Z0-9]+|[a-zA-Z0-9_]+|[a-zA-Z0-9_]w*)/', $tweet, $matches);

    return $matches[0];
}


置き換える

$hash_tags = getHashtags($profile->body);
$mention_tags = getMentiontags($profile->body);

$okikae = $profile->body;

foreach ($hash_tags as $v) {
    $okikae = str_replace($v,'<a href="https://twitter.com/search/?q='.urlencode($v).'" target="_blank">'.$v.'</a>',$okikae);
}

foreach ($mention_tags as $v) {
    $okikae = str_replace($v,'<a href="https://twitter.com/'.str_replace("@","",$v).'" target="_blank">'.$v.'</a>',$okikae);
}

こんな感じです。