私は次の例のつぶやきを持っています:RegExp:ツイート(twitter.com)からユーザー名を抽出する方法は?
RT @ user1:who is @thing and @ user2?
私だけUSER1、事とuser2のを持っていると思います。
これら3つの名前を抽出するためにどのような正規表現を使用できますか?
PS:ユーザー名には、文字、数字、下線のみを使用する必要があります。
私は次の例のつぶやきを持っています:RegExp:ツイート(twitter.com)からユーザー名を抽出する方法は?
RT @ user1:who is @thing and @ user2?
私だけUSER1、事とuser2のを持っていると思います。
これら3つの名前を抽出するためにどのような正規表現を使用できますか?
PS:ユーザー名には、文字、数字、下線のみを使用する必要があります。
はテストさ:
/@([a-z0-9_]+)/i
ルビー(IRB)に
:Pythonで
>> "RT @user1: who are @thing and @user2?".scan(/@([a-z0-9_]+)/i)
=> [["user1"], ["thing"], ["user2"]]
:PHPで
>>> import re
>>> re.findall("@([a-z0-9_]+)", "RT @user1: who are @thing and @user2?", re.I)
['user1', 'thing', 'user2']
:
<?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
)
この(私は便宜上名付けキャプチャを使用)、それを実行する必要があります。?
+ @(?[-ZA-Z0-9 _] +):??[^ @] + @([^ \ S] +)[^ @] + @([-ZA-Z0-9 _] +)
PHPは、式を使用するとエラーメッセージを表示します。 「最後にデリミタが見つからない」ようなもの。 – caw
この正規表現での反復子(findAllの)試してみてください??
(@[\w-]+)
別れを
シンプルで素敵! scan(ruby)と組み合わせて、一連のマッチを得る:text.scan(/ @ [\ w - ] + /) – Danny
/(?<!\w)@(\w+)/
上記には、次のシナリオが含まれています。このスレッドでは、次のようにはなりません。
ありがとう。他の誰も電子メールアドレスの問題を考慮していません! – innonate
このテキストの問題を解決するには、あなたのプロジェクトにtwitterテキストライブラリ[1]を含めることをお勧めします。
twttr.txt.extractMentions("a very generic twitt with some @mention");
をあなたは[-Z0-9_]、すなわち、@([-ZA-Z0-9 _] +)を中心にキャプチャグループを追加する必要があります –
おかげで、それはうまく動作します!最後の1つの質問:「@」の前にスペースがなければならない場合、または先頭にスペースがなければならない場合は、次の式を使用できますか? "/(| ^)@([a-z0-9 _] +)/ i" – caw
lookbehindを使う - http://www.regular-expressions.info/lookaround.html – user4812