我想在管道字符处拆分以下字符串而不在转义管道处拆分:
"123|ABC|x\|yz|123" should result in ["123","ABC","x|yz",123]
是否有人对perl有这样的分裂正则表达式?
答案 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仅断言一个反斜杠。