我正在尝试对perl
命令行中的匹配模式使用一些算术。我能够为一场比赛做到这一点,但不是全部。
str="a1b2c3"
perl -pe 's/\d+/$&+1/e' <<<"$str"
a2b2c3
我理解这里$&
指的是第一个匹配的数字1
。我需要做什么才能添加1
到所有数字?是否有一个类似于$&
代表所有匹配模式的变量?或者需要修改正则表达式以匹配多个数字。
对于给定的输入,我期望输出类似于
a2b3c4
我正在尝试对perl
命令行中的匹配模式使用一些算术。我能够为一场比赛做到这一点,但不是全部。
str="a1b2c3"
perl -pe 's/\d+/$&+1/e' <<<"$str"
a2b2c3
我理解这里$&
指的是第一个匹配的数字1
。我需要做什么才能添加1
到所有数字?是否有一个类似于$&
代表所有匹配模式的变量?或者需要修改正则表达式以匹配多个数字。
对于给定的输入,我期望输出类似于
a2b3c4
g
替换标志将使 Perl 为输入行上的每个非重叠匹配应用表达式。Nitpick:这里实际上没有涉及捕获组(原始问题提到了捕获组)。Perl 变量
$&
是“由最后一次成功的模式匹配匹配的字符串”。这与引用对应捕获组匹配的字符串(带括号的表达式)的 eg 等$1
不同。$2
中没有捕获组\d+
,但您可以s/(\d+)/$1+1/ge
改用它,它确实使用单个捕获组。s/(\d+)/$1+1/ge
结果和结果之间没有区别s/\d+/$&+1/ge
。在这个简短的内嵌 Perl 脚本中,您选择使用其中一个没有区别,但通常您希望避免$&
在执行许多正则表达式操作的较长 Perl 程序中使用,至少在使用较旧的 Perl 时发布。来自
perldoc perlvar
(我的重点):如果您实际使用的是
zsh
shell (<<<
是一个非标准运算符,它确实来自zsh
,但此后已被复制到其他几个 shell 中),请注意您不需要为此调用perl
。你可以做:
在哪里
(#m)
打开整个比赛的捕获$MATCH
(相当于perl
's$&
)<->
匹配任何十进制数字序列(就像<5-12>
但没有任何限制)。