perl中的负面匹配

时间:2015-07-02 08:54:06

标签: perl regex-negation

我试图在perl中使用否定匹配。
我想用$FROM替换竞争单词$TO,除非是

.$FROM  

. $FROM  

如何为此编写表达式?

我使用了负面预测正则表达式。但我得到以下错误:

Variable length lookbehind not implemented in regex; marked by <-- HERE in m/(?<!\.\s*)

1 个答案:

答案 0 :(得分:1)

如果你知道.和搜索值之间可以出现多少空格,你可以将固定宽度的负面观察链接在一起。例如处理零个或一个空格:

s/(?<!\.)(?<!\. )$FROM/$TO/;

如果未绑定空格数但搜索值是文字字符串(不是模式),则可以反转所有内容,使用负前瞻,然后反转结果值。 e.g。

my $rfrom   = reverse $FROM;
my $rto     = reverse $TO;
my $rstring = reverse $string;
$rstring =~ s/$rfrom(?! *\.)/$rto/;
$string = reverse $rstring;

如果搜索值可以是一种模式,那么就没有通用的解决方案可以解决缺少可变宽度负面后视的问题。