perl - 使用带引号的字符拆分字符串

时间:2016-08-26 12:28:05

标签: regex perl split

我想在管道字符处拆分以下字符串而不在转义管道处拆分:

"123|ABC|x\|yz|123"  should result in ["123","ABC","x|yz",123]

是否有人对perl有这样的分裂正则表达式?

1 个答案:

答案 0 :(得分:1)

你可以使用负面的后视:

use warnings 'all';
use strict;

use Data::Dumper;

my $str = '123|ABC|x\|yz|123';
my @bits = split /(?<!\\)\|/, $str;

print Dumper(@bits);

结果:

$VAR1 = '123';
$VAR2 = 'ABC';
$VAR3 = 'x\\|yz';
$VAR4 = '123';

正如Wiktor所指出的,如果您的字符串形式为:

my $str = '123|ABC|x\|yz|123\\|456|123\\345';

123\\将与456分组(通过最后一个字符串 123\\345会好的):

$VAR1 = '123';
$VAR2 = 'ABC';
$VAR3 = 'x\\|yz';
$VAR4 = '123\\|456';
$VAR5 = '123\\345';

这是因为负面的lookbehind仅断言一个反斜杠。