2012-09-25 9 views
5

Facebookのハッシュタグスクレーパーを作成しています。ハッシュタグには句読点と英数字が含まれているようです。ここに私が望むものの例があります:すべての英数字ハッシュタグに一致する正規表現

こんにちは#world!私は#fac_bookスクレーパーを#m4kingしていて、素敵な普通の#expressionが好きです。

は、私はそれがworldm4kingfacexpression(それはスペースを含め、句読点に達した場合、私はそれがカットオフしたいノート)と一致したいと思います。ハッシュ記号が含まれていないといいですが、それほど重要ではありません。

ちょっと入れてみると、私はrubyの文字列スキャン方法を使って複数のタグを取得することになります。

ありがとうございました!

答えて

5

正規表現は次のとおりです:#([A-Za-z0-9]+)は、必要なものと一致し、キャプチャグループに配置する必要があります。後でこのグループにアクセスできます。たぶんthisは、(Rubyのコンテキストからの)正規表現についてのいくつかの洞察を助けるでしょう。

上記の正規表現は、#というタグが見つかると一致を開始し、次の文字または数字をキャプチャグループに送ります。文字や数字以外のものが見つかると、それはマッチングを停止します。最後に、あなたはあなたが後になっているものを含むグループになります。

+0

ありがとう!私は間違いなくそれを読むでしょう! –

6
str = 'Hello #world! I am #m4king a #fac_book scraper and would like a nice regular #expression' 
str.scan(/#([A-Za-z0-9]+)/).flatten #=> ["world", "m4king", "fac", "expression"] 

各キャプチャグループが独自の配列内にあるため、#flattenの呼び出しが必要です。

また、あなたは、ルックビハインドマッチングのみの「#」の後に英数字と一致します使用することができます。ここでは

str.scan /(?<=#)[[:alnum:]]+/ #=> ["world", "m4king", "fac", "expression"] 
+0

ありがとう! 2番目に最初のバージョンを使用することに何らかの利点がありますか? 2番目の方がはるかに単純であるようです(最初の方を平坦化しなければならないよりも少しパフォーマンスが良いと思います) –

2

はシンプルな正規表現#[[:alnum:]_]/です。 Facebookには現在ハッシュタグの一部としてアンダースコアが含まれているため(twitterも同様)、アンダースコアが含まれています。ここで

str = 'Hello #world! I am #m4king a #fac_book scraper and would like a nice regular #expression' 
str.scan(/#[[:alnum:]_]+/) 

はRubular上のビューです: http://rubular.com/r/XPPqwtVGN9

関連する問題