我想我在这里错过了一些简单的事情......
$key = "deco-1-LB-700F:MAR:40";
if ($key =~ m/deco-(.*?)-(.*?)-(.*?):(.*?):(.*?)/) {
print "1=$1 2=$2 3=$3 4=$4 5=$5";
}
这导致输出:1 = 1 2 = LB 3 = 700F 4 = MAR 5 =
为什么$ 5不会返回值40?
干杯,斯图
答案 0 :(得分:6)
因为.*?
是惰性的,如果可以的话会匹配零个字符。将正则表达式锚定到字符串的末尾:
$key =~ m/deco-(.*?)-(.*?)-(.*?):(.*?):(.*?)$/
但使用比全能.*
和.*?
更明确的内容几乎总是更好。告诉正则表达式引擎您想要匹配的内容。假设分隔符-
和:
从未出现在实际匹配中,我建议
$key =~ m/deco-([^-]*)-([^-]*)-([^:]*):([^:]*):([^:]*)$/
[^-]
表示“匹配-
以外的任何字符”。[^:]
表示“匹配:
以外的任何字符”。答案 1 :(得分:2)
split qr/[:-]/, 'deco-1-LB-700F:MAR:40'
返回
(
'deco',
1,
'LB',
'700F',
'MAR',
40,
)