正则表达式匹配字符串中的每个单词,无论空格或连字符?
我认为这个问题可能很有趣,可以把它放在这里。
例如,我有一个搜索查询字符串,如: "hello world"
可能有这样的字符串:
Hello World Hello-world hello!! world
你怎么能写一个动态匹配这些的表达式? 如果表达式有效,它也适用于此:
Search: "Hi pals!" Hi pals Hi! Pals! Hi-pals
可能吗?
当然,你可以这样做:
/hi.*?pals/i
最后的尾随i
允许不区分大小写的匹配,以及.*?
匹配"hi"
和"pals"
之间的任何字符(换行符除外)。
一个Rubular演示: http ://rubular.com/r/cwtbV2iTwy
请注意它也匹配像“喜马拉雅好朋友”这样的字符串:
Himalaya pals ^^ ^^^^
如果您不希望发生这种情况,请在混合中添加一些单词边界:
/\bhi\b.*?\bpals\b/i
据推测,你不希望“嗨好朋友”匹配“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?"]