正则表达式替换字符串,但不替换分配给标量的值

时间:2012-02-23 10:04:36

标签: regex perl

如果我的问题听起来有点尴尬,请原谅我。我正在寻找一个正则表达式,它将替换perl源文件中的行号,而不会影响分配给标量的值。

我认为下面的内容会让我的问题更加清晰。假设我有一个perl源代码,如下所示:

1. $foo = 2.4;
2. print $foo;

我想要一个正则表达式来替换这些行号(1. 2. etc..)而不影响分配给标量的值,因此在这种情况下$foo

由于

2 个答案:

答案 0 :(得分:5)

将正则表达式锚定到行的开头:

删除数字:

perl -p -i.bak -e's{^\d+\. }{}' myperl

答案 1 :(得分:4)

在perl正则表达式中,您可以使用插入符号^来表示行的开头。 $表示一行的结尾。这些被称为锚。

所以要在一行的开头(仅限)找到一个数字\d,你可以搜索

/^\d+/

如果你想删除这些数字,你可以“替换”它们,如

s/^\d+//g

您还希望在数字后面加上点,这样您就可以尝试 ;

/^\d+./

但是在正则表达式中,一个圆点表示“任何字符”,因此您需要转义点以使其按字面解释

/^\d+\./

插入符号^也在字符集中起双重作用(它否定了它们),我只提到它,因为它是学习正则表达式时混淆的常见原因。

/[^\d]/   # Match characters that are not digits