首页 > 解决方案 > 我可以使用正则表达式来指定要与值进行比较的数组的索引吗?

问题描述

这是我正在尝试做的一个小例子

#!/usr/bin/perl
$nums = "a,b,c,1,2,3";
@arr = split(",", $nums);

# If the contents of indexes 3 through 5 all match the correct syntax (any integer), print the message
if($arr[/^[3-5]{1}/] =~ /^[0-9]+/ ) {
     print "Those elements in this array are all numbers";
}else{
     print "\nsome of those elements are not numbers"
}

这可以测试元素 3 到 5 是否都是整数吗?

标签: regexperl

解决方案


那是行不通的。/^[3-5]{1}/将返回0or1取决于 的值$_,所以它只会检查$arr[0]or $arr[1]

你可以使用

all { arr[$_] =~ /^[0-9]+\z/ } 3..5

或者

all { /^[0-9]+\z/ } @arr[3..5]

all由 List::Util 提供。这可以改为使用grep

!grep { arr[$_] !~ /^[0-9]+\z/ } 3..5

或者

!grep { !/^[0-9]+\z/ } @arr[3..5]

推荐阅读