简单的perl split()和正则表达式问题

ste*_*esu 0 regex arrays perl split

可能重复:
如何使用正则表达式解析Perl中引用的CSV?

我试图获取一个CSV文件并将每一行导入一个数组(其中每个元素代表一列).CSV文件的格式非常简单:

item1,item2,item3
nextrowitem1,item2,item3
"items,with,commas","are,in,quotes"
Run Code Online (Sandbox Code Playgroud)

我使用以下方法导入了CSV文件:

open(FILE, "test.csv");
@lines = <FILE>;
Run Code Online (Sandbox Code Playgroud)

然后我使用以下方法循环:

foreach(@lines){
    @items = split(/regular expression/);
    /*Do stuff with @items array*/
}
Run Code Online (Sandbox Code Playgroud)

(请注意,您不需要使用,split(/regular expression, $string);因为split()假设$_没有提供字符串)

在我使用CSV文件测试文件之前,其中没有任何项目包含逗号和简单的正则表达式split(/,/).这工作得很好,所以在这个正则表达式之后,文件,读取它或我的循环没有任何问题.但是,当我点击包含逗号的项目时,他们可以理解地划分为:

1 => "items
2 => with
3 => commas"
4 => "are
5 => in
6 => quotes"
Run Code Online (Sandbox Code Playgroud)

而不是期望的:

1 => items,with,commas
2 => are,in,quotes
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我开发正则表达式来正确分割这个数组吗?基本上如果项目以quote(")开头,则需要等到","分割.如果项目不以引号开头,则需要等到,分割.

Sur*_*oot 5

尝试阅读Text :: CSV作为已经执行此操作的可能选项.将CSV解析为正则表达式的问题在于,您必须查找","(您指出的)以及仅仅是,分离的内容.


yst*_*sth 5

只需使用Text :: CSV_XS代替......