【问题标题】:Replacing string after match匹配后替换字符串
【发布时间】:2014-08-01 17:06:28
【问题描述】:

我是 perl 新手,想知道如何在匹配的模式之后替换一些文本。

例如我有一个字符串:

    my $string = 'startDate="2014-06-10"';
    $string =~ s/startDate="2014-06-10"/startDate=""\g;

这段代码替换了我想要的,但我希望能够有任何日期,并用空白字符串替换日期。所以我想替换startDate=" 之后的任何文本,并在 10 个字符后停止替换。最好的方法是什么?

谢谢

【问题讨论】:

    标签: regex string perl replace


    【解决方案1】:

    假设您的日期始终采用该格式,您可以使用更通用的正则表达式来替换日期:

    my $string = 'startDate="2014-06-10"';
    $string =~ s/startDate="\d{4}-\d{1,2}-\d{1,2}"/startDate=""/g;
    

    由于startDate="" 保持不变,您实际上只需要替换日期本身:

    my $string = 'startDate="2014-06-10"';
    $string =~ s/\d{4}-\d{1,2}-\d{1,2}//g;
    

    【讨论】:

    • 效果很好。谢谢:)
    【解决方案2】:

    假设 perl >5.10:

    s/startDate="\K[^"]{10}//g;
    

    startDate=" 之后替换不是" 的10 个字符。使用\K 意味着您不需要替换您想要保留的位:

    \K ,这会导致正则表达式引擎“保留”它匹配的所有内容 在 \K 之前并且不将其包含在 $& 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2016-06-13
      • 2023-02-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      相关资源
      最近更新 更多