Ruby 与字符串中的每个单词匹配而不考虑空格或连字符的正则表达式?

Ruby 与字符串中的每个单词匹配而不考虑空格或连字符的正则表达式?,ruby,regex,Ruby,Regex,我觉得这个问题放在这里会很有趣 例如,我有一个用于搜索查询的字符串,如:“hello world” 可以有如下字符串: Hello World Hello-world hello!! world /hi.*?pals/i 如何编写一个动态匹配这些参数的表达式?如果表达式起作用,那么它也应该起作用: Search: "Hi pals!" Hi pals Hi! Pals! Hi-pals 可能吗?当然,您可以这样做: Hello World Hello-world hello!! worl

我觉得这个问题放在这里会很有趣

例如,我有一个用于搜索查询的字符串,如:
“hello world”

可以有如下字符串:

Hello World
Hello-world
hello!! world
/hi.*?pals/i
如何编写一个动态匹配这些参数的表达式?如果表达式起作用,那么它也应该起作用:

Search: "Hi pals!"

Hi pals
Hi! Pals!
Hi-pals

可能吗?

当然,您可以这样做:

Hello World
Hello-world
hello!! world
/hi.*?pals/i
结尾处的尾随
i
启用不区分大小写的匹配,并且
*?
匹配
“hi”
“pals”
之间的任何字符(换行符除外)

红宝石演示:

请注意,它还匹配一个字符串,如“Himalaya pals”:

如果您不希望出现这种情况,请在混合中添加一些单词边界:

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

当然,你可以这样做:

Hello World
Hello-world
hello!! world
/hi.*?pals/i
结尾处的尾随
i
启用不区分大小写的匹配,并且
*?
匹配
“hi”
“pals”
之间的任何字符(换行符除外)

红宝石演示:

请注意,它还匹配一个字符串,如“Himalaya pals”:

如果您不希望出现这种情况,请在混合中添加一些单词边界:

/\bhi\b.*?\bpals\b/i
大概你也不想让“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?"]
大概你也不想让“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?"]

有没有办法让它充满活力?这肯定与hello worldWell不匹配。您可以这样做:
/hi.*?pals | hello.*?world/i
来匹配这两个问候语。不知道你说的动态是什么意思…有没有办法让它变得动态?这肯定与hello worldWell不匹配。您可以这样做:
/hi.*?pals | hello.*?world/i
来匹配这两个问候语。不知道你说的动态是什么意思。。。