我试图在perl中使用否定匹配。
我想用$FROM
替换竞争单词$TO
,除非是
.$FROM
或
. $FROM
如何为此编写表达式?
我使用了负面预测正则表达式。但我得到以下错误:
Variable length lookbehind not implemented in regex; marked by <-- HERE in m/(?<!\.\s*)
答案 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;
如果搜索值可以是一种模式,那么就没有通用的解决方案可以解决缺少可变宽度负面后视的问题。