替换perl中字符的最后一次出现

时间:2013-10-04 03:44:01

标签: regex perl

我有一行

if (($x > 0) && ($flag == 1))

我想用冒号(:)替换最后一个“)”。所以它变成

if (($x > 0) && ($flag == 1):

我尝试使用$line =~ s/\)$/\:/;,但它不起作用

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:2)

以下内容应将最后)替换为:

$line =~ s/\)([^)]*)$/:$1/;

答案 1 :(得分:0)

您正在寻找的RegEx是

$line =~ s/.*\K\)/:/;

如果您正在使用严格警告,那么如果之前尚未声明,则可能会遇到使用$ line中的变量的问题。您应该阅读Perl Regular Expressions

答案 2 :(得分:0)

在行的末尾可能有空格(例如换行符)(除非你已经明确删除了它),所以下面的正则表达式应该可以做到(同时保留换行符):

$line =~ s/\)(\s*)$/:$1/;