【问题标题】:Negative Match in perlperl中的负匹配
【发布时间】:2015-07-02 08:54:05
【问题描述】:

我正在尝试在 perl 中使用否定匹配。
我想用$TO替换竞争词$FROM除非

.$FROM  

. $FROM  

如何为此编写表达式?

我使用了负前瞻正则表达式。但我收到以下错误:

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

【问题讨论】:

    标签: perl regex-negation


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多