Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
Arrays 如何确定数组中是否有两个与正则表达式匹配的连续元素?_Arrays_Ruby - Fatal编程技术网

Arrays 如何确定数组中是否有两个与正则表达式匹配的连续元素?

Arrays 如何确定数组中是否有两个与正则表达式匹配的连续元素?,arrays,ruby,Arrays,Ruby,我正在使用Rails 5和Ruby 2.4。如果我有一个字符串数组,如何判断是否有两个连续的字符串与正则表达式匹配 例如,我有: ["1234", "aa", "cc33", "44"] 我想看看是否有两个以字母开头的连续元素(在上面的例子中,条件是true,“aa”和“cc33”)。但在以下情况下,它将是false: ["bb", "55", "mm", "77"] 这个 告诉我有多少字符串以字母开头,但它没有告诉我是否有两个以字母开头的连续元素 我该如何计算呢?使用相同的正则表达式,您可

我正在使用Rails 5和Ruby 2.4。如果我有一个字符串数组,如何判断是否有两个连续的字符串与正则表达式匹配

例如,我有:

["1234", "aa", "cc33", "44"]
我想看看是否有两个以字母开头的连续元素(在上面的例子中,条件是
true
“aa”
“cc33”
)。但在以下情况下,它将是
false

["bb", "55", "mm", "77"]
这个

告诉我有多少字符串以字母开头,但它没有告诉我是否有两个以字母开头的连续元素


我该如何计算呢?

使用相同的正则表达式,您可以执行以下操作:

my_arr.each_cons(2).any? { |pair| pair.all? { |elem| elem =~ /^\p{L}/ } }

检查。

我知道您希望确定数组的两个连续元素是否与给定的正则表达式匹配。为了有效地执行此操作,我们希望检查尽可能少的元素(字符串)以进行匹配。特别是,我们不需要检查数组的所有元素,也不需要检查单个元素两次。这里有一种方法可以做到这一点

arr = ["1234", "aa", "cc33", "44"]
r = /\A[[:alpha:]]{2}/

a = [false, false]
arr.any? do |s| 
   a[0] = s.match?(r)
   a.rotate! == [true, true]
end
   #=> true

在Ruby v2.4中首次亮相。对于早期版本,可以编写
!!(s=~r)
。内部感叹号将真实值转换为
false
,将虚假值转换为
true
;外部感叹号从
true
翻转到
false
,反之亦然

类似于
arr.each_cons(2)。有吗?{| a,b | a[/\a[a-z]/i]&&b[/\a[a-z]/i]}
如果您想要比
每一项都快的东西,请查看这个,它有一些替代方案。
arr = ["1234", "aa", "cc33", "44"]
r = /\A[[:alpha:]]{2}/

a = [false, false]
arr.any? do |s| 
   a[0] = s.match?(r)
   a.rotate! == [true, true]
end
   #=> true