Ruby 检查字符串是否匹配
我有一个字符串和一个带有一些字符串的数组。 如下 我想知道该主机名是否与任何数组元素匹配 当我尝试使用下面的代码获取输出时Ruby 检查字符串是否匹配,ruby,Ruby,我有一个字符串和一个带有一些字符串的数组。 如下 我想知道该主机名是否与任何数组元素匹配 当我尝试使用下面的代码获取输出时 no no no no 下面是重复数组中每个元素的循环。我希望通过对阵列进行单次检查来检查主机名是否只生成“是”或“否”输出 Array.each do |x| if hostname.match(x) puts "yes" else puts "no" end end 给定这个固定的Ruby代码: hostname = 'TETDC3DBE
no
no
no
no
下面是重复数组中每个元素的循环。我希望通过对阵列进行单次检查来检查主机名是否只生成“是”或“否”输出
Array.each do |x|
if hostname.match(x)
puts "yes"
else
puts "no"
end
end
给定这个固定的Ruby代码:
hostname = 'TETDC3DBE01'
array = ['WEB','APP','STR','DBE']
其中,如果您想在数组中找到作为主机名的子字符串匹配的所有元素,那么您的代码应该可以工作。更简单的匹配系统可能是:
array.select { |x| hostname.match(x) }
# => ["DBE"]
使用像put
这样的工具生成输出并不总是非常有用,因为“是”或“否”文本不能被更多的代码处理。试着把Ruby程序想象成一个转换链,这样可以选择所有匹配项,然后可以打印它们,如下所示:
puts array.select { |x| hostname.match(x) }.join(',')
# => DBE
在这种情况下,我不会使用regexp。一个简单的字符串#include?
可能更快。此外,如果阵列引线中的任何元素匹配,则将返回true
hostname = 'TETDC3DBE01'
array = ['WEB','APP','STR','DBE']
array.any? { |x| hostname.include?(x) }
#=> true
让我们用你的代码来修复它
hostname = "TETDC3DBE01"
arr = ['WEB','APP','STR','DBE']
arr.each do |x|
if hostname.match?(x)
puts "yes"
else
puts "no"
end
end
match
给出结果数组和
匹配?
为您提供真值或假值签出方法
它将集合的每个元素传递给给定的块。如果块返回的值不是false或nil,则该方法将返回true。如果未给出该块,Ruby将添加一个{obj | obj}
的隐式块,如果至少有一个集合成员不是false或nil,该隐式块将导致any?
返回true
如果相反地提供了一个模式,则该方法返回任何集合成员的pattern===element
就你而言:
hostname = 'TETDC3DBE01'
['WEB','APP','STR','DBE'].any? do |x|
hostname.match(x)
end
或者即使你的意思是“匹配相等”:
正则表达式变得非常简单:
hostname = "TETDC3DBE01"
array = ['WEB','APP','STR','DBE']
re = Regexp.union(array)
hostname.match?(re) # => true
首先,不应该重新定义数组<代码>'TETDC3DBE01'.match('WEB')#nil'TETDC3DBE01.match('APP')#nil'TETDC3DBE01.match('STR')#nil
全部为零,所以它们不匹配,你到底想做什么?现在我只想输出“yes”不是主机名。match(x)
工作吗?Try['WEB'、'APP'、'STR'、'DBE'。map{s}主机名。match?(/'35s]:{,“否”,“是”]
。您需要hostname='TETDC3DBE01'
(即使用单引号或双引号)。最好现在就编辑它,在它吸引下票数之前。我以“不不不不是”的身份离开,我只想要是或不是
hostname = 'TETDC3DBE01'
['WEB','APP','STR','DBE'].any?(hostname)
hostname = "TETDC3DBE01"
array = ['WEB','APP','STR','DBE']
re = Regexp.union(array)
hostname.match?(re) # => true