1. TOPTOP
  2. Webサービス
  3. Twitter

Twitterのアカウントで使われている名前を正規表現にするとこうなりました。”.(ピリオド)”と”*(アスタリスク)”の活用について

|

Twitter_logo_blue

Twitter 検索APIのGET search/tweetsから名前(フルネーム)を引っ張ってリンクを付けるためには、正規表現を使って、preg_replace関数を用いる必要があります。

以前の記事(新しいタブで開く)で、#(ハッシュタグ)にリンクを付ける方法を書きましたので、そのときと同じ正規表現をすればいいかと思っていましたが、勝手が違うようです。

ハッシュタグのときは、次のコードを用いてました。

$tweet['text']=preg_replace("/\s#(w*[一-龠_ぁ-ん_ァ-ヴーa-zA-Za-zA-Z0-9]+|[a-zA-Z0-9_]+|[a-zA-Z0-9_]w*)/u", " <a href=\"https://twitter.com/search/%23\\1\" target=\"twitter\">#\\1</a>", $tweet['text']);

Twitterの名前を正規表現にするコード

しかし、名前を観察していると、ハッシュタグには存在しない文字列が表示されることが分かってきました。例えば次のような文字列です。

これらの他にもいろいろあると思いますが、いちいち正規表現にするのも面倒です。従って「すべての文字列を含む」という意味を込めて、次のコードにしました。第1引数を、“/(.*)/u”にしています。

$tweet['user']['name'] = preg_replace("/(.*)/u", " <a href=\"https://twitter.com/\\1\" target=\"twitter\">\\1</a>", $tweet['user']['name']);
  • .(ピリオド)” → 改行を除く任意の1文字
  • *(アスタリスク)” → 直前のパターンの0回以上の繰り返し
  • /u(スラッシュユー)” → 文字コードをUTF-8にするときのおまじないw

これで、名前で表記される文字列について、正規表現で表すことができます。

ちなみに…

ただし上記のコードで、リンクそのものをはることについては成功しましたが、そのリンク先については上手く行ってません。

preg_replace_username

“このページは存在しません”というページに飛んでしまいます。

preg_replace関数の第2引数で使われている、”https://twitter.com/\\1\”というURLでは、そのまま”https://twitter.com/名前”に飛んでしまうからでしょう。

“https://twitter.com/スクリーンネーム”に飛ばせば、すっきりするのでしょうが、その方法が分かりません。

〔参考サイト〕