次のツイート例があります。
RT @user1: who are @thing and @user2?
user1、thing、user2だけが欲しいです。
これらの3つの名前を抽出するためにどの正規表現を使用できますか?
PS:ユーザー名には、文字、数字、アンダースコアのみを含める必要があります。
テスト済み:
/@([a-z0-9_]+)/i
Ruby(irb)の場合:
>> "RT @user1: who are @thing and @user2?".scan(/@([a-z0-9_]+)/i)
=> [["user1"], ["thing"], ["user2"]]
Pythonの場合:
>>> import re
>>> re.findall("@([a-z0-9_]+)", "RT @user1: who are @thing and @user2?", re.I)
['user1', 'thing', 'user2']
PHPの場合:
<?PHP
$matches = array();
preg_match_all(
"/@([a-z0-9_]+)/i",
"RT @user1: who are @thing and @user2?",
$matches);
print_r($matches[1]);
?>
Array
(
[0] => user1
[1] => thing
[2] => user2
)
この正規表現でイテレータ(findall)を試してください:
(@[\w-]+)
さよなら
/(?<!\w)@(\w+)/
上記は次のシナリオをカバーしていますが、このスレッドの他の回答はカバーしていません。
このテキストの問題を解決するには、プロジェクトにTwitterテキストライブラリ[1]を含めることをお勧めします。
twttr.txt.extractMentions("a very generic twitt with some @mention");
これでうまくいくはずです(便宜上、名前付きキャプチャを使用しました):
。+?@(?[a-zA-Z0-9 _] +):[^ @] +?@(?[^ \ s] +)[^ @] +?@(?[a-zA-Z0- 9 _] +)