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

udi*_*209 6 regex perl backreference

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

s/([^0-9])([xy])/\1 1\2/g
                   ^
              whitespace here
Run Code Online (Sandbox Code Playgroud)

但这个空白出现在替代中.

如果没有perl混淆反向引用,我怎么不在替换字符串中获取空格\11

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

ike*_*ami 11

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

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

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

s/([^0-9])([xy])/${1}1$2/g
Run Code Online (Sandbox Code Playgroud)

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

s/[^0-9]\K(?=[xy])/1/g
Run Code Online (Sandbox Code Playgroud)


Tot*_*oto 6

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

s/([^0-9])([xy])/${1}1${2}/g
Run Code Online (Sandbox Code Playgroud)