Perl 正则表达式哈希以匹配字符串



现在我有以下代码...

%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这样的哈希键的正则表达式?

如果你想使用正则表达式,没有什么能阻止你这样做:

%strings = (
'a'    => 'x',
'bd+' => 'y',
'c'    => 'z'
);
...
if( grep { $line[0] =~ /^$_$/ } keys %strings ) {
...
}

^$是必要的,以确保完整的字符串$line[0]匹配,而不仅仅是其中的一部分。

请记住,这将比eq比较慢得多。另一方面,要按grep计算的表达式数量会少得多,因此如果执行速度有问题,您可能需要分析不同的选项。

另外,请记住,您可能需要优化正则表达式。例如,^bd{1,2}$将匹配一个b后跟一位或两位数字。甚至^b[1-6]?d$...

如果我没错的话,

bd+

这将匹配"b",后跟任何仅包含数字的字符串。

my %strings = ('a' => 'x',
map{("b$_" , 'y') } 0..63,
'c' => 'z');

应该做这个把戏;)

如果这是你想要的

如果你需要在代码后面添加一个"B 值",你仍然可以$strings{"b$value"} = 'y';在哈希中添加新值

最新更新