perl regexp问题

时间:2010-12-04 15:16:26

标签: regex perl

我有这种线条

object1:object2:object3:行的其余部分

我想要一个正则表达式来提取每个文本直到冒号。

在这种情况下,我需要:

$ 1 = object1 $ 2 = object2 $ 3 = object3 4美元=其余部分

我试过这个:

  

$_ =~ m/\(.*\):\(.*\):\(.*\):\(.*\)/i

但似乎行不通。

我哪里错了?

3 个答案:

答案 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默认为$_ =~。所以你可以把它减少到:

$_

http://ideone.com/TLepM

答案 2 :(得分:1)

my @objects = split ':', $data_line, 4;