现在我有以下代码......
%strings = ( 'a' => 'x',
'b0' => 'y',
'b1' => 'y',
'b2' => 'y',
...
'bN' => 'y'
'c' => 'z');
....
if(grep { $_ eq $line[0] } keys %strings){
....
}
所以我设置了这个哈希。 $ line是通过读取文件创建的。然后我查看该行中的第一个字符串是否包含在我的哈希中。这段代码完美无缺。但是,我的问题出现在哈希中,b正在增长。例如,现在我必须明确列出b0 - b63。这是64个不同的定义,只需要具有相同的值。有没有办法为像b\/d\
这样的哈希键设置正则表达式?
答案 0 :(得分:4)
如果你想使用正则表达式,没有什么能阻止你这样做:
%strings = (
'a' => 'x',
'b\d+' => 'y',
'c' => 'z'
);
...
if( grep { $line[0] =~ /^$_$/ } keys %strings ) {
...
}
^
和$
是确保完整字符串$line[0]
匹配的必要条件,而不仅仅是其中的一部分。
请记住,这比eq
比较慢得多。另一方面,grep
评估的表达式数量会低得多,因此如果执行速度有问题,您可能需要分析不同的选项。
另外,请记住,您可能希望优化正则表达式。例如,^b\d{1,2}$
将匹配b
后跟一个或两个数字。甚至是^b[1-6]?\d$
......
答案 1 :(得分:0)
如果我没记错你,
b\d+
这将匹配" b"后跟任何一串唯一的数字。
答案 2 :(得分:0)
my %strings = ('a' => 'x',
map{("b$_" , 'y') } 0..63,
'c' => 'z');
应该做的伎俩;)
如果它是你想要的
如果您需要添加' b值'稍后在代码中,您仍然可以$strings{"b$value"} = 'y';
在散列中添加新值