2011-07-31 3 views
0

私はこの質問をここに載せておもしろいと思った。空白またはハイフンに関係なく文字列の各単語に一致する正規表現ですか?

例えば私のような検索クエリの文字列があります。"hello world"

をこのような文字列があるかもしれません:

Hello World 
Hello-world 
hello!! world 

どのように動的にこれらと一致する式を書くことができ?式がうまくいけば、これでも動作します:

Search: "Hi pals!" 

Hi pals 
Hi! Pals! 
Hi-pals 

可能ですか?

答えて

3

あなたはこのような何か行うことができ、確かに:最後に

/hi.*?pals/i 

末尾iは、大文字と小文字を区別しないマッチングを可能にし、そして.*?"hi""pals"間(改行を除く)任意の文字に一致します。

A Rubularデモ:http://rubular.com/r/cwtbV2iTwy

が、それはまた、「ヒマラヤの仲間」のような文字列と一致していることを注意してください:

Himalaya pals 
^^  ^^^^ 

あなたはそれが起こることをしたくない場合は、中にいくつかの単語の境界を追加ミックス:

/\bhi\b.*?\bpals\b/i 
+0

動的にする方法はありますか?これは間違いなくhello worldとは一致しません – DucDigital

+0

これは、次のようにすることができます: '/ hi。*?pals | hello。*?world/i' 2つの挨拶の両方に一致します。あなたは_dynamic_でも何を意味するのか分かりません... –

2

おそらく、「恋人」が「恋人」と一致することは望ましくありません。あなたの入力と同じ言葉を持つ文字列を見つけようとしているようです。その場合は、ここに方法があります:

class String 
    def words 
    scan(/\w+/).map(&:downcase) 
    end 
end 

a = ["Hi pals", "Hi, pals", "hi-pals", "hi! ? pals?", "hipals", "himalaya pals"] 
search = "hi pals" 

a.select {|test| test.words == search.words} 

=> ["Hi pals", "Hi, pals", "hi-pals", "hi! ? pals?"] 
関連する問題