如何将单引号替换为两个单引号,但如果两个单引号在perl中彼此相邻则不执行任何操作

时间:2017-08-18 06:07:54

标签: regex perl

我需要将字符串中的所有单引号更改为两个单引号,如果连续找到多个单引号,它们应保持不变。

e.g。 str = abc'def''sdf'''asdf 输出应该是:str = abc''def''sdf'''asdf

1 个答案:

答案 0 :(得分:0)

我认为最干净的方法是搜索以下模式:

(?<!')'(?!')

然后用两个单引号替换它。该模式搜索单引号,但它具有负的lookbehind和lookahead断言,用于检查前一个和前一个字符是否也不是另一个单引号。

my $var = "abc'def''sdf'";
print "$var\n";
$var =~ s/(?<!')'(?!')/''/g;
print "$var\n";

请注意,您也可以编写一个匹配的直线模式,例如

(^|[^'])'($|[^'])

但是替换变得棘手,因为你会消耗单引号周围的字符。如果我不这样做,我不想做额外的工作。

<强>输出:

abc'def''sdf'
abc''def''sdf''

在这里演示:

Rextester