连接Perl正则表达式选择

时间:2012-11-14 16:47:51

标签: regex perl

  

可能重复:
  How to concatenate $1 with number in a regex

我正在尝试使用SomeText替换文件中SomeText2的所有实例,使用命令行中的简单正则表达式替换(在Windows上):

perl -pi.bak -e "s/(SomeText)/$12/g" sometext.txt

这不起作用,因为没有$12选择。如何在没有空格的情况下正确指出$1选择标记?

3 个答案:

答案 0 :(得分:5)

${1}

作为一般规则,在Regexp或插值字符串文字中,您可以在任何{}$ sigil之后使用@来明确界定您关注的变量的名称。

是的,正如@Mat所说,如果您使用的是某种类型的Unix系统,请使用单引号。

答案 1 :(得分:2)

我认为,这最适合于环视断言或\K转义:

perl -pi.bak -e "s/SomeText\K/2/g" sometext.txt

或者使用后视断言:

perl -pi.bak -e "s/(?<=SomeText)/2/g" sometext.txt

这样可以防止移除\K之前或后视镜内的任何内容,因此您无需将其放回原位。

您还可以对变量使用长语法,即使用${name},即${1}

答案 2 :(得分:0)

对于您的具体情况,您根本不需要使用捕获变量:

s/SomeText/SomeText2/g

关于变量插值的更一般问题的答案,请参阅Dan的答案。