私は小さなPHPスクリプトを作成して、ユーザーフィードから最新の5ダースのTwitterステータスの更新を取得し、Webページに表示するためにフォーマットします。この一環として、ハッシュタグをsearch.twitter.comへのハイパーリンクとして書き換えるために正規表現を置き換える必要があります。最初に私は使用しようとしました:
<?php
$strTweet = preg_replace('/(^|\s)#(\w+)/', '\1#<a href="http://search.twitter.com/search?q=%23\2">\2</a>', $strTweet);
?>
(https://gist.github.com/445729から取得)
テストの過程で、#testがTwitter Webサイトのリンクに変換されていることを発見しましたが、#123は変換されていません。インターネットで少し調べてさまざまなタグを試してみたところ、リンクを構成するには、ハッシュタグのどこかにアルファベット文字またはアンダースコアが含まれている必要があるという結論に達しました。数字のみのタグは無視されます(おそらく、「良いプレゼンテーションのボブ、スライド#3が私のお気に入りでした!」などがリンクされないようにするためです)。これにより、上記のコードが正しくなくなります。これは、#123をリンクに変換するためです。
私はしばらくの間あまり正規表現をしていなかったので、さびた状態で次のPHPソリューションを思いつきました。
<?php
$test = 'This is a test tweet to see if #123 and #4 are not encoded but #test, #l33t and #8oo8s are.';
// Get all hashtags out into an array
if (preg_match_all('/(^|\s)(#\w+)/', $test, $arrHashtags) > 0) {
foreach ($arrHashtags[2] as $strHashtag) {
// Check each tag to see if there are letters or an underscore in there somewhere
if (preg_match('/#\d*[a-z_]+/i', $strHashtag)) {
$test = str_replace($strHashtag, '<a href="http://search.twitter.com/search?q=%23'.substr($strHashtag, 1).'">'.$strHashtag.'</a>', $test);
}
}
}
echo $test;
?>
できます; しかし、それが何をするかについてはかなり長い時間がかかるようです。私の質問は、gist.githubから取得したものと同様の単一のpreg_replaceがあり、ハッシュタグに数字だけが含まれていない場合にのみ、条件付きでハッシュタグをハイパーリンクに書き換えますか?