如何从Perl中以逗号分隔的字符串中提取单词?

时间:2009-12-08 09:24:03

标签: regex perl pcre

我有一句话:

$myline = 'ca,cb,cc,cd,ce';

我需要将 ca $ 1 cb 匹配到 $ 2 等等。

不幸的是

$myline =~ /(?:(\w+),?)+/;

不起作用。使用pcretest,它只会将'ce'与$ 1匹配。 怎么做对了? 我是否需要将其置于while循环中?

谢谢!

5 个答案:

答案 0 :(得分:10)

为什么不使用split function

@parts = split(/,/,$myline);

split使用您提供的正则表达式将字符串拆分为字符串列表。

答案 1 :(得分:9)

使用my @parts = split(/,/, $myline)不是更容易吗?

答案 2 :(得分:3)

虽然split是解决问题的好方法,但列表上下文中的捕获正则表达式也很有效。了解这两种方法很有用。

my $line = 'ca,cb,cc,cd,ce';
my @words = $line =~ /(\w+)/g;

答案 3 :(得分:3)

查看您可以从CPAN下载的CSV PM,即Text::CSVText::CSV_XS

这将为您提供所需的信息,并说明恰好引用的任何逗号分隔值。

使用这些模块可以轻松地将数据拆分并通过它进行解析......

例如:

my @field = $csv->fields;

答案 4 :(得分:1)

如果元素的数量是可变的,那么你就不会按照你想要的方式去做。使用全局标志循环遍历字符串:

while($myline =~ /(\w+)\b/g) {
    # do something with $1
}

我猜你的真实数据比'ca,cb,cc,cd,ce'更复杂,但如果不是,则可能不保证使用正则表达式。你最好在分隔字符上拆分字符串:

my @things = split ',', $myline;