在perl正则表达式中单独的反向引用后跟数字文字

时间:2013-09-10 14:03:02

标签: regex perl backreference

我发现了这个相关的问题:In perl, backreference in replacement text followed by numerical literal 但它似乎完全不同。 我有像这样的正则表达式

s/([^0-9])([xy])/\1 1\2/g
                   ^
              whitespace here

但是替换中出现了空白。

  

如果不将perl混淆到\11的反向引用,如何才能在替换字符串中获取空格?

例如。 15+x+y更改为15+ 1x+ 1y。 我想获得15+1x+1y

2 个答案:

答案 0 :(得分:11)

\1是一个正则表达式原子,匹配捕获的第一个捕获。在替换表达式中使用它是没有意义的。你想要$1

$ perl -we'$_="abc"; s/(a)/\1/'
\1 better written as $1 at -e line 1.

在字符串文字(包括替换的替换表达式)中,您可以使用curlies $var来分隔${var}。这意味着您需要以下内容:

s/([^0-9])([xy])/${1}1$2/g

以下更有效(尽管为xxx提供了不同的答案):

s/[^0-9]\K(?=[xy])/1/g

答案 1 :(得分:6)

只需在数字上加上大括号:

s/([^0-9])([xy])/${1}1${2}/g