Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在perl中按空格分隔行,但忽略引号中的空格_Regex_Perl_Split - Fatal编程技术网

Regex 在perl中按空格分隔行,但忽略引号中的空格

Regex 在perl中按空格分隔行,但忽略引号中的空格,regex,perl,split,Regex,Perl,Split,我有这样一句话: A2 IDENT = 'THING1','THING2' A3 IDENT = 'G' A4 IDENT = 'SOME THING','ANOTHER THING' A2,IDENT,=,'THING1','THING2' A3,IDENT,=,'G' A4,IDENT,=,'SOME THING','ANOTHER THING' 我想得到这样的代币: A2 IDENT = 'THING1','T

我有这样一句话:

A2     IDENT    =     'THING1','THING2'
A3 IDENT   =   'G'
A4   IDENT   =         'SOME THING','ANOTHER THING'
A2,IDENT,=,'THING1','THING2'
A3,IDENT,=,'G'
A4,IDENT,=,'SOME THING','ANOTHER THING'
我想得到这样的代币:

A2     IDENT    =     'THING1','THING2'
A3 IDENT   =   'G'
A4   IDENT   =         'SOME THING','ANOTHER THING'
A2,IDENT,=,'THING1','THING2'
A3,IDENT,=,'G'
A4,IDENT,=,'SOME THING','ANOTHER THING'
我可以在
\s+
上进行拆分,然后在
上进行拆分(以拆分最后一部分),但最后一部分中的空格会将其弄乱。

使用strict;
use strict;
use warnings;
for my $line (<DATA>) {
    my @fields = $line =~ /('.*?'|\S+),?/g;
    print join(',', @fields), "\n";
}
__DATA__
A2     IDENT    =     'THING1','THING2'
A3 IDENT   =   'G'
A4   IDENT   =         'SOME THING','ANOTHER THING'
使用警告; 对于我的$行(){ 我的@fields=$line=~/('.'.'\S+),/g; 打印联接(“,”,@fields),“\n”; } __资料__ A2标识='THING1','THING2' A3标识符='G' A4标识=‘某件事’,‘另一件事’
使用:

注意:使用可以更容易地查看结果数组包含的内容

(?:\s+|,)(?=(?:[^']*'[^']*')*[^']*$)
您可以按此进行拆分,然后删除
空拆分
。请参阅演示