使用负面的lookbehind逃避正则表达式中的逗号

时间:2014-01-13 15:51:26

标签: regex perl

在Perl中,我需要在逗号周围分割一个字符串。但是,字符串本身可以包含逗号,不应该分开。那些逗号用反斜杠转义。我的问题是:如何编写分裂正则表达式?

我目前有:

/\s*(?<!\\),\s*/

但是,这不会删除反斜杠。

来自字符串

 apples, pears\, yellow, pears\, green

我想要

apples
pears, yellow
pears, green

但是我得到了

apples
pears\, yellow
pears\, green

如何删除反斜杠?

1 个答案:

答案 0 :(得分:4)

作为使用split的替代方法,您可以使用Text::ParseWords来允许嵌入或转义分隔符:

use strict;
use warnings;
use Data::Dumper;
use Text::ParseWords;

my $str = 'apples, pears\, yellow, pears\, green';
my @list = quotewords('\s*,\s*', 0, $str);
print Dumper \@list;

<强>输出:

$VAR1 = [
          'apples',
          'pears, yellow',
          'pears, green'
        ];

编辑:向模式添加\s*将允许您删除不需要的多余空格。另请注意,第二个参数是0,用于删除分隔符和反斜杠。

作为旁注,如果您只想删除反斜杠,可以使用音译或替换:

$str =~ tr/\\//d;
$str =~ s/\\//g;