我有一条线:
$myline = 'ca,cb,cc,cd,ce';
我需要将ca匹配为$1,将cb匹配为$2,等等。
很遗憾
$myline =~ /(?:(\w+),?)+/;
不起作用。使用 pcretest 它只会将'ce'匹配到 $1。怎么做才对?
我需要将它放入while循环吗?
不是更容易使用my @parts = split(/,/, $myline)
吗?
虽然split
是解决问题的好方法,但在列表上下文中捕获正则表达式也很有效。了解这两种方法很有用。
my $line = 'ca,cb,cc,cd,ce';
my @words = $line =~ /(\w+)/g;
查看可以从 CPAN 下载的 CSV PM,Text::CSV
即Text::CSV_XS
.
这将为您提供所需的内容,并解释碰巧被引用的任何逗号分隔值。
使用这些模块可以轻松地将数据拆分并解析...
例如:
my @field = $csv->fields;
如果元素的数量是可变的,那么您就不会按照您的目标进行操作。使用全局标志循环遍历字符串:
而($myline =~ /(\w+)\b/g) { # 用 $1 做某事 }
我猜你的真实数据比'ca,cb,cc,cd,ce'更复杂,但如果不是,那么可能没有必要使用正则表达式。你最好在分隔符上拆分字符串:
我的@things = 拆分',', $myline;