我有这种线条
object1:object2:object3:行的其余部分
我想要一个正则表达式来提取每个文本直到冒号。
在这种情况下,我需要:
$ 1 = object1 $ 2 = object2 $ 3 = object3 4美元=其余部分
我试过这个:
$_ =~ m/\(.*\):\(.*\):\(.*\):\(.*\)/i
但似乎行不通。
我哪里错了?
答案 0 :(得分:4)
当split
完全按照您的要求执行操作时,为什么要使用正则表达式?
$x = "object1:object2:object3:rest of the line";
@x = split (":", $x);
foreach $s (@x) {
print "$s\n";
}
输出:
object1
object2
object3
rest of the line
如果您想将自己限制在四个字段而不管冒号数量,您可以使用:
$x = "object1:object2:object3:rest of the line with a : character";
@x = split (":", $x, 4);
foreach $s (@x) {
print "$s\n";
}
输出:
object1
object2
object3
rest of the line with a : character
答案 1 :(得分:3)
您需要删除\
:
$_ =~ m/(.*?):(.*?):(.*?):(.*)/i
此外,i
(不区分大小写的匹配)是多余的,因为正则表达式中没有字符以及m
,它允许您选择除{{之外的其他正则表达式边界字符。 1}}。您也不需要/
,因为Perl默认为$_ =~
。所以你可以把它减少到:
$_
答案 2 :(得分:1)
my @objects = split ':', $data_line, 4;