我认为这个问题可能很有趣,可以把它放在这里。
例如,我有一个搜索查询字符串,如:"hello world"
可能会有这样的字符串:
Hello World
Hello-world
hello!! world
你怎么能写一个动态匹配这些的表达式?如果表达式有效,它也应该适用于此:
Search: "Hi pals!"
Hi pals
Hi! Pals!
Hi-pals
有可能吗?
答案 0 :(得分:3)
当然,你可以这样做:
/hi.*?pals/i
最后的尾随i
启用不区分大小写的匹配,.*?
匹配"hi"
和"pals"
之间的任何字符(换行符除外)。
Rubular演示:http://rubular.com/r/cwtbV2iTwy
请注意它也匹配像“Himalaya pals”这样的字符串:
Himalaya pals
^^ ^^^^
如果您不希望这种情况发生,请在混音中添加一些单词边界:
/\bhi\b.*?\bpals\b/i
答案 1 :(得分:2)
据推测,你不希望“hi pals”匹配“chi palsy”,对吗?好像你正试图找到与输入字符相同的字符串。如果是这样,这是一种方式:
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?"]