我一直试图将string
分割为,
或+
IF ,
或+
不在" "
或{{ 1}}。
示例:
' '
结果
print var1, "hello ,you "+var2
print var1
hello ,you
我一直在努力为var2
做这件事,但实际上已经走得很远......
我从这样的事情开始:
regex
但还没有想出如何报道其他案件。
是否可以根据两个值拆分(?:,|\+)\s*(?=(?:['"].*['"]))
并得到一个像我正在寻找的结果?
感谢您的帮助!
答案 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'
];