我有一个代表大小的字符串数组。
所有格式变体的列表如下:
目标:转换为以下格式:
目前正在将所有值推送到名为@sizearray的数组中,如下所示:
push(@sizearray, $data[$size_num]);
然后,
my @formattedsize = @sizearray;
foreach (@formattedsize) {
if ($formattedsize[$_] =~ /(\d+)x(\d+)/) {
#convert to
if (???) {
#???
}
if (???) {
#???
}
}
如何浏览数组中的每个元素并使用新格式将值保存到新数组中?
答案 0 :(得分:1)
您正试图解决2个问题:
假设您只有两个选项,矩形和圆形。矩形似乎是由一对以'x'分隔的实数定义的,因此正则表达式可能是
(\d+(?:\.\d+)?)\s*x\s*(\d+(?:\.\d+)?)
这里有两个实数的表达式:
x
和更多可选空格数字表达式周围的外括号是一个捕获组,它使正则表达式引擎在结果中进行任何匹配。内括号(?:\.\d+)?
是非捕获组(?:
部分)。它允许您将尾随?
量词(0或1)应用于小数部分,但不能单独捕获它。
如果输入与此不匹配,则转到下一个模式,寻找圆形规格。根据需要重复所有可能性。
对于上面的表达
# assume string to be parsed is in $_
if (my ($h,$w) = /(\d+(?:\.\d+)?)\s*x\s*(\d+(?:\.\d+)?)/))
{
printf "%s x %s\n", $h, $w;
}
我没有对此进行过测试,因此可能存在拼写错误......但这是一般性的想法。