我发现了这个相关的问题: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
。
答案 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