【问题标题】: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 之前并且不将其包含在 $& 中