Perl简单正则表达式捕获组未捕获



为了输入数据,我有一个可变大小的哈希,其中多个元素的名称相似。散列可能是什么样子的一个例子是;

  • wineName0=>霞多丽
  • wineFull0=>4.00
  • wineHalf0=>2.00
  • wineName1=>黑皮诺
  • wineFull1=>16.00
  • wineHalf1=>8.00
  • plateName0=>牛排
  • 板材成本0=>14.00
  • plateTemps0=>允许

至于处理它们,我正在遍历键,用正则表达式检查它们,捕获它们的编号,然后使用该编号来获取编号相似的元素,就像这样;

foreach $key (sort keys %in){
if($key =~ /wineName(d+)/){
if($wineTable eq ""){
$wineTable = qq{
<tr>
<td colspan=3 class="label">Wines</td>
</tr>
};
}
$wineName = $key;
$in{$wineName} =~ s/s/+/g;
$wineFull = "wineFull$1";
$wineHalf = "wineHalf$1";
$wineTable .= qq{
<tr>
<!-- $key -->
<td>$in{$wineName}</td>
<td>$$in{$wineFull}</td>
<td>$$in{$wineHalf}</td>
</tr>
};
}
if($key =~ /beerName(d+)/){
if($beerTable eq ""){
$beerTable = qq{
<tr>
<td colspan=3 class="label">Beers</td>
</tr>
};
}
$beerName = $key;
$in{$beerName} =~ s/s/+/g;
$beerFull = "beerFull$1";
$beerHalf = "beerHalf$1";
$beerTable .= qq{
<tr>
<!-- $key -->
<td>$in{$beerName}</td>
<td>$$in{$beerFull}</td>
<td>$$in{$beerHalf}</td>
</tr>
};
}
if($key =~ /plateName(d+)/){
if($plateTable eq ""){
$plateTable = qq{
<tr>
<th>Name</th>
<th>Cost</th>
<th>Cook Temperatures</th>
</tr>
};
}
my $plateName = $key;
$in{$plateName} =~ s/s/+/g;
my $plateCost = "plateCost$1";
my $plateTemp = "plateTemps$1";
if($in{$plateTemp}){
$in{$plateTemp} = 1;
}else{
$in{$plateTemp} = 0;
}
$plateTable .= qq{
<tr>
<!-- $key -->
<td>$in{$plateName}</td>
<td>$$in{$plateCost}</td>
<td>$in{$plateTemp}</td>
</tr>
};
}
}

我的问题是,由于某种原因,/plateName(d+)/没有捕获。因此,如果$key == "plateName1"$plateCost最终等于"plateCost",而不是"plateCost1"。我举的例子中的哈希键就是实际的例子。考虑到这一点,我需要帮助理解为什么葡萄酒的正则表达式有效,而盘子的正则表达式无效,因为它们几乎相同。

根据您发布的代码,问题似乎在于:

$in{$plateName} =~ s/s/+/g;

模式中有太多的/

最新更新