(与之前的问题相关:我需要重置Perl哈希索引吗?)
我从一个文件中获取了一个哈希,其定义如下:
%project_keys = (
cd => "continuous_delivery",
cm => "customer_management",
dem => "demand",
dis => "dis",
do => "devops",
sel => "selection",
seo => "seo"
);
我需要检查评论标题是否有正确的格式,如果是,就链接到一个单独的URL。
例如,如果评论标题是
"cm1234 - Do some CM work"
我想链接到以下URL:
http://projects/customer_management/setter/1234
目前,我正在使用以下(硬编码)正则表达式:
if ($title =~ /(cd|cm|dem|dis|do|sel|seo)(\d+)\s.*/) {
my $url = 'http://projects/'.$project_keys{$1}.'/setter/'.$2
}
但是显然我想从哈希键本身构建正则表达式(上面的哈希示例会相对频繁地更改)。 我考虑简单地将键朴素地连接如下:
# Build the regex
my $regex = '';
foreach my $key ( keys %project_keys ) {
$regex += $key + '|';
}
$regex = substr($regex, 0, -1); # Chop off the last pipe
$regex = '('.$regex.')(\d+)\s.*';
if ($title =~ /$regex/) {
my $url = 'http://projects/'.$project_keys{$1}.'/setter/'.$2
}
但是,a) 它没有按照我的期望工作,b) 我认为有更好的 Perl 方法来完成这个任务。或者还有其他方法吗?
$1
将是ID,而$2
则不会被设置。 - hobbs