8

我发现了这个相关的问题:在 perl 中,替换文本中的反向引用后跟数字文字 ,但它似乎完全不同。我有一个像这样的正则表达式

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

但是那个空白出现在替换中。

如何在不让 perl 混淆反向引用的情况下不获取替换字符串中的空格\11

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

4

2 回答 2

15

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

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

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

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

以下更有效(尽管给出了不同的答案xxx):

s/[^0-9]\K(?=[xy])/1/g
于 2013-09-10T14:07:27.610 回答
8

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

s/([^0-9])([xy])/${1}1${2}/g
于 2013-09-10T14:07:07.430 回答