2012-03-19 16 views
9

Rubyでは、1単語の投稿を調べるための正規表現を作成するにはどうすればよいですか?Ruby正規表現に「単語が含まれています」

テキストを受け入れるWebフォームがあるとします。私は

if the_body == "join" 

しかし、テキスト全体の提出は、「参加」である場合にのみ動作することを使用することができ、「参加」が含ま--only--文かどうかを確認したい場合、私は知っています。

は、どのように私はこのような提出をキャッチします:

「私はあなたのクラブに参加したいですか?」または 「私にご参加ください」

ありがとう!

+4

ジョイントベンチャーを捕まえたいですか? –

答えて

24

あなたは

string =~ /join/i 

または

string.match(/join/i) 

でパフォーマンスのコメントについて少し更新を行うことができます、速度差が本当にここに重要ではありませんが

>> s = "i want to join your club" 
>> n = 500000 
=> 500000 
>> Benchmark.bm do |x| 
..  x.report { n.times { s.include? "join" } } 
.. x.report { n.times { s =~ /join/ } } 
.. end 
     user  system  total  real 
    0.190000 0.000000 0.190000 ( 0.186184) 
    0.130000 0.000000 0.130000 ( 0.135985) 

を実際には正規表現の方が高速でした。

(\W|^)join(\W|$)

はWORDが存在するかどうかで、私たちは「参加する」かどうかを確認する必要があり、注意してください:文字列に正確なWORDを見つけるため

+0

正規表現を行う必要はありません。通常の文字列検索よりもオーバーヘッドが高くなります。 – thomthom

+1

オーバーヘッドについては確かですか? 'String#include?'は最後にRabin-Karpアルゴリズムを使用します。これは最悪の場合のパフォーマンスがO(mn)ですが、適切な正規表現エンジンはおそらくO(n)でこれを行うことができます。 –

+1

まあ、それは私がいつも言われたことです。私はそれを検証するために調査していませんが、妥当と思われます。そう、いいえ。よく分かりません。 ;) – thomthom

0

ここにRegexpは必要ありません。String#include?はその仕事をします。

+0

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

+0

彼は正確な言葉を求めています。 – Ele

4

正解は

the_body.match(/\bjoin\b/i)または使用する他の正規表現です文字列上記のすべての解決策は、次のような文字列では失敗します:they are joining canalsまたはMy friend Bonjoiny is a cool guy

関連する問題