拆分字符串by,或+如果不在" "或者' '

时间:2014-09-21 04:40:45

标签: regex perl

我一直试图将string分割为,+ IF ,+不在" "或{{ 1}}。

示例:

' '

结果

print var1, "hello ,you "+var2

print var1

hello ,you

我一直在努力为var2做这件事,但实际上已经走得很远......

我从这样的事情开始:

regex

但还没有想出如何报道其他案件。

是否可以根据两个值拆分(?:,|\+)\s*(?=(?:['"].*['"])) 并得到一个像我正在寻找的结果?

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

您可以使用正则表达式:

my @words = $line =~ /( (?:[^,+"']+|"[^"]*"|'[^']*')+ )/xg;

但使用Text::ParseWords可能会更清晰:

use strict;
use warnings;

use Text::ParseWords;

my $line = 'print var1,  "hello ,you "+var2';

my @words = parse_line( qr{,\s*|\+}, 0, $line );

use Data::Dump;
dd @words;

输出:

("print var1", "hello ,you ", "var2")

答案 1 :(得分:2)

或者,您可以使用回溯动词来执行此操作。

use strict;
use warnings;
use Data::Dumper;

my $re = qr/(?:"[^"]*"|'[^']*')(*SKIP)(*F)|[,+]\s*/;

my $str = 'print var1,  "hello ,you "+var2';
my @res = split($re, $str);

print Dumper \@res;

输出

$VAR1 = [
          'print var1',
          '"hello ,you "',
          'var2'
        ];