いろいろなところに情報あるけど、改行がバグったりしてうまく動かない。
ということで今回は
・マッチしたものを取得したい
・マッチしたものを置き換えたい
の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);
}
削除
置き換えでなく、削除したい場合。
上記を関数にしただけ。
// ハッシュタグを削除
public static function removeHashTag($data)
{
preg_match_all('/#(w*[一-龠_ぁ-ん_ァ-ヴーa-zA-Za-zA-Z0-9]+|[a-zA-Z0-9_]+|[a-zA-Z0-9_]w*)/', $data, $matches);
foreach ($matches[0] as $s) {
$data = str_replace($s,'',$data);
}
return $data;
}
// メンションを削除
public static function removeMention($data)
{
preg_match_all('/@(w*[一-龠_ぁ-ん_ァ-ヴーa-zA-Za-zA-Z0-9]+|[a-zA-Z0-9_]+|[a-zA-Z0-9_]w*)/', $data, $matches);
foreach ($matches[0] as $s) {
$data = str_replace($s,'',$data);
}
return $data;
}
// URLを削除
public static function removeURL($data)
{
$pattern ='@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@';
preg_match_all($pattern, $data, $matches);
foreach ($matches[0] as $s) {
$data = str_replace($s,'',$data);
}
$data = trim(preg_replace('/(?:\n|\r|\r\n)/', '', $data));
return $data;
}
こんな感じです。