检查数组是否包含时间-Perl

检查数组是否包含时间-Perl,perl,Perl,如何检查数组是否包含时间值?我试过这样检查: if ( @time =~ /$_:$_:$_/) 但它不起作用。有什么想法吗 附言:时间是这样给出的:HH:MM:SS与时间匹配 要使用正则表达式匹配检查HH:MM:SS,最简单的模式是 /\d\d:\d\d:\d\d/ 如果您只想这样做,请为字符串的开始(^)和结束($)添加锚定 /^\d\d:\d\d:\d\d$/ 如果要确保您的数字仅为0到9,而不是来自任何脚本的数字,请使用字符组 /^[0-9]{2}:[0-9]{2}:[0-9]{2

如何检查数组是否包含时间值?我试过这样检查:

if ( @time =~ /$_:$_:$_/)
但它不起作用。有什么想法吗

附言:时间是这样给出的:HH:MM:SS

与时间匹配 要使用正则表达式匹配检查
HH:MM:SS
,最简单的模式是

/\d\d:\d\d:\d\d/
如果您只想这样做,请为字符串的开始(
^
)和结束(
$
)添加锚定

/^\d\d:\d\d:\d\d$/
如果要确保您的数字仅为
0
9
,而不是来自任何脚本的数字,请使用字符组

/^[0-9]{2}:[0-9]{2}:[0-9]{2}$/
如果你还想确保时间是有效的,事情会变得更复杂

你可能想要阅读和阅读。有很多有用的信息和工具链接


关于数组和标量 但是,您显示的代码中没有数组。在Perl中,符号为
$
的变量称为标量,表示单个值。这是你唯一可以与之匹配的模式。数组将以
@
符号开头

您可以做的是匹配数组中的每个元素。为此,必须迭代数组

一种非常冗长的方法是:

my $matches;
foreach my $time (@times) {
    ++$matches if $time =~ m/\d\d:\d\d:\d\d/;
}
一个更完美的方法是使用

这利用了
grep
返回的列表将转换为标量上下文中的元素数这一事实。如果您只想知道是否有任何元素匹配,这就足够了


你的代码做了什么 在Perl中,
$\uUg
变量称为主题,如果没有指定其他值,它通常包含某些运算符的某种默认值。根据您在程序中使用代码行的位置,您可以将
@time
中的元素数量(由于标量上下文,请参见上文)与由
$和冒号的内容构成的模式进行匹配

if (
  @time  # number of elements in array @times
  =~     # because this operator forces scalar context
  /
    $_   # value of $_ based on surrounding code, or undef
    :    # a literal colon
    $_   # see above
    :    # a literal colon
    $_   # see above
  /x     # ( I added /x to allow comments so this compiles)
) { ... }

您的代码没有数组。并且,
$
将被插值到模式中的任何值。只需更正此问题,您不能将
$
更改为
@
。该代码将测试
@time
中的元素数量,作为一个字符串,与一个由
$\uu
的内容和几个冒号构建的正则表达式进行比较。如果你从来没有做过比这更好的尝试来解决你自己的问题,那么你将永远是一个让别人做他们工作的程序员。这不是代码本身。代码是:
$tableData{$date[$count_date]}{$company[$aux2]}{$ip[$aux2]}{$info[$aux3]}
这只是一个简化,在简化方面做得很好。但是,那里没有数组。可能有数组引用,但我们不知道。在任何情况下,如果有一系列的事情,你必须迭代。在
/^[0-9]{2}:[0-9]{2}:[0-9]{2}$/
表达式末尾的
$
是什么意思?@JoãoV
$
是字符串结尾的锚点。有关模式含义的解释,请参考类似的工具。:)@若奥夫。查看我的更新。这将澄清您所有的问题,并有望为您提供一些新的问题,这将有助于阅读文档;)<代码>\z
表示字符串的结尾
$
表示不同的含义,不应在此处使用。
if (
  @time  # number of elements in array @times
  =~     # because this operator forces scalar context
  /
    $_   # value of $_ based on surrounding code, or undef
    :    # a literal colon
    $_   # see above
    :    # a literal colon
    $_   # see above
  /x     # ( I added /x to allow comments so this compiles)
) { ... }