Ini*_*ian 5 command-line perl regular-expression
我正在尝试对perl
命令行中的匹配模式使用一些算术运算。我可以为一场比赛做到这一点,但不能为所有人做到。
str="a1b2c3"
perl -pe 's/\d+/$&+1/e' <<<"$str"
a2b2c3
Run Code Online (Sandbox Code Playgroud)
我理解这里$&
指的是第一个匹配的数字1
。我需要做什么才能添加1
到所有数字?是否有一个类似于$&
代表所有匹配模式的变量?或者需要修改正则表达式以匹配多个数字。
对于给定的输入,我期待输出类似
a2b3c4
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 10
str="a1b2c3"
perl -pe 's/\d+/$&+1/ge' <<<"$str"
Run Code Online (Sandbox Code Playgroud)
g
替换的标志将使 Perl 为输入行上的每个非重叠匹配应用表达式。
Nitpick:这里实际上没有涉及捕获组(原始问题提到了捕获组)。Perl 变量$&
是“与上次成功模式匹配匹配的字符串”。这与 eg$1
和$2
etc.不同,后者指的是由相应的捕获组(带括号的表达式)匹配的字符串。中没有捕获组\d+
,但您可以s/(\d+)/$1+1/ge
改用它,它确实使用单个捕获组。
有没有什么区别s/(\d+)/$1+1/ge
,并s/\d+/$&+1/ge
在成果方面。在这个简短的内嵌 Perl 脚本中,您选择使用其中一个没有区别,但通常您希望避免$&
在执行许多正则表达式操作的较长 Perl 程序中使用,至少在使用较旧的 Perl 时释放。
来自perldoc perlvar
(我的重点):
性能问题
传统上,在Perl中,任何使用任何三个变量
$`
,$&
或$'
(或其use English
等价物)在代码的任何地方,造成所有后续成功的模式匹配,使匹配的字符串的一个副本,以防代码这些变量的可能随后进入一个. 这对整个程序造成了相当大的性能损失,因此通常不鼓励使用这些变量。[...]
在 Perl 5.20.0 中,默认启用了新的写时复制系统,最终解决了这三个变量的所有性能问题,并使它们可以在任何地方安全使用。
归档时间: |
|
查看次数: |
1338 次 |
最近记录: |