Ruby 检查字符串是否与任何正则表达式匹配
我有一个正则表达式数组和一个字符串数组。阵列的大小可以任意长(例如,100或1000)。没有字符串匹配两个不同的正则表达式。我不确定我将如何执行它,但让我们假设它就在那里。正则表达式以Ruby 检查字符串是否与任何正则表达式匹配,ruby,regex,Ruby,Regex,我有一个正则表达式数组和一个字符串数组。阵列的大小可以任意长(例如,100或1000)。没有字符串匹配两个不同的正则表达式。我不确定我将如何执行它,但让我们假设它就在那里。正则表达式以pre开头,后跟可选冒号,后跟一个或多个空格,后跟特定字符串,后跟单个空格,后跟整数。它将不区分大小写 regexes = [/pre: my_string (\d+)/i, /pre: another (\d+)/i] strings = ["comet", "eclipse", "sunshine", "sta
pre
开头,后跟可选冒号,后跟一个或多个空格,后跟特定字符串,后跟单个空格,后跟整数。它将不区分大小写
regexes = [/pre: my_string (\d+)/i, /pre: another (\d+)/i]
strings = ["comet", "eclipse", "sunshine", "starlight", "moonlight"]
对于每个字符串,我想检查它匹配的正则表达式并返回相应的匹配项。
上面的示例代码演示了我当前的方法
strings.each {|string|
regexes.each {|regex|
if regex.match(string)
p regex.match(string)
break
end
}
}
这似乎效率低下。实现这一点更有效的方法是什么?不要使用正则表达式数组;相反,使用搜索树 这是一篇很棒的介绍文章:用于排序和搜索字符串的快速算法
正则表达式是否遵循任何类型的模式,或者它们是否完全通用?是的,我目前在设计中有一个特定的模式。我已经包括了它的一个描述。你在乎哪个特定的正则表达式匹配吗?不。只要返回第一个匹配,然后继续。可能重复的你不需要任何猴子补丁,当你有。@mu你完全正确-很好的一点,这正是StackOverflow如此伟大的原因。谢谢
desired = Regexp.union(/RM/, /dog/, /hat/)
x = "RM20"
y = "phat"
puts "rawr!" if y =~ desired
#=> rawr!
puts "match!" if x =~ desired
#=> match