Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 检查字符串是否匹配_Ruby - Fatal编程技术网

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