変数$textの中身が以下のような時どのようなプログラムを組んだらいいでしょうか?
「あああああ #ああ#あい#あう#あえ#あお#あか #ああい #か」
この変数$textのハッシュタグの内容には日本語や英語だけでなく、その他の言語の文字(ハングルやアラビア文字など)でハッシュタグを作ってある場合があります。またハッシュタグは。「#ああ#あい」の様にくっついていても
「#ああ #あい」の2つのハッシュタグとして判別したいです。
現状は、変数$tagsに配列でハッシュタグの情報が入っているので以下のようにしていますが、#ああい のハッシュタグを#ああ のハッシュタグで二重に書き換えてしまったりしています。
usort($tags, create_function('$tags,$b', 'return mb_strlen($b, "UTF-8") - mb_strlen($tags, "UTF-8");'));
for ($i = 0 ; $i < count($tags); $i++){
$text = str_ireplace('#'.$tags[$i], '<a href="http://aaa.com/'.$tags[$i].'">#'.$tags[$i].'</a>', $text );
}
よろしくお願い致します。
ハッシュごとに分割してから処理すると、二重書き換えに対処できると思います。
$tags = array("ああい", "あい", "あお", "あか", "か", "き", "すみ"); $text = "あああああ #ああ#あい#あう#あえ#あお#あか #ああい #か #き #すみ"; // 分割 $hashs = preg_split("/[\s#]+/", $text); // テキストとハッシュに分割 $text = array_shift($hashs); foreach($hashs as $hash) { if(in_array($hash, $tags)) { $hash = str_ireplace($hash, '<a href="http://example.jp/'.$hash.'">#'.$hash.'</a>', $hash); } echo $hash .'<br>'; }
正規表現を使って行いました。
変数$textの値が「あああああ #ああ#あい#あう#あえ#あお#あか #ああい #か」の値が入っているとして
echo $convert_link = convert_link($text);
function convert_link($text)
{
$text= preg_replace("/#(w*[一-龠_ぁ-ん_ァ-ヴー_]+|[a-zA-Z0-9_]+|[a-zA-Z0-9_]w*)/u", "#\\1", $text);
return $text;
}
で日本語とアルファベットのハッシュタグが変換されました。
正規表現を使う場合、外国の文字(ロシア語、アラビア語、ハングル等)は、どのように表現したらいいのでしょうか??