如何用Perl中的计算表达式替换?

Sek*_*har 10 regex perl substitution

有一个文件dummy.txt

内容如下:

 9/0/2010
 9/2/2010
 10/11/2010
Run Code Online (Sandbox Code Playgroud)

我必须将月份部分(0,2,11)改为+1,即(1,3,12)我写了替换正则表达式如下

 $line =~ s/\/(\d+)\//\/\1+1\//;
Run Code Online (Sandbox Code Playgroud)

这是打印

9/0+1/2010
9/2+1/2010
10/11+1/2010
Run Code Online (Sandbox Code Playgroud)

如何使它添加 - 3数字而不是执行字符串concat?2+1??

cod*_*ict 16

三个变化:

  • 您必须使用e修饰符来允许替换部件中的表达式.
  • 要全局替换,您应该使用g修饰符.如果每行有一个日期,则不需要这样做.
  • $1在替换方使用,而不是反向引用

这应该工作:

$line =~ s{/(\d+)/}{'/'.($1+1).'/'}eg;
Run Code Online (Sandbox Code Playgroud)

此外,如果你的正则表达式包含你正在使用的分隔符(/在你的情况下),最好选择一个不同的分隔符({}上面),这样你就不必逃避正则表达式中的分隔符,使你的正则表达式干净.

  • @OP:我已经更新了我的答案.`s ///`等同于`s {} {}`,只是它使用了不同的分隔符,可以避免转义那些`/`. (2认同)