可以使用单个s ///指定迭代替换过程吗?

kjo*_*kjo 2 regex perl

假设我们想要在第一个既不是也不是的字符之前替换它的000每个实例.101

例如,如果原始字符串是

"0011101TUVW0123ABC0123"
Run Code Online (Sandbox Code Playgroud)

然后所需的替换将产生字符串

"000000000000000TUVW0123ABC0123"
Run Code Online (Sandbox Code Playgroud)

在Perl 5中,假设$_保存输入字符串,那么类似这样的东西就可以了:

'*any* constant you like!' while s/^(0*)1/${1}000/;

这种方法只是继续应用相同的替换规则(s/^(0*)1/${1}000/)直到它"收敛"(即停止改变输入).

我想知道是否存在一个s///替代,使得它的单个应用程序实现相同的结果.(想想单个应用程序s/1/000/g能够替换每次出现的1方式000.)


需要注意的是一个单一的应用程序s/^(0*)1/${1}000/g中,/g尽管如此,只会取代的第一次出现1,导致:

"000001101TUVW0123ABC0123"
Run Code Online (Sandbox Code Playgroud)

Cas*_*yte 6

使用\G与字符串开头或上一个匹配后的位置匹配的锚点:

echo "0011101TUVW0123ABC0123" | perl -pe 's/\G0*\K1/000/g'
Run Code Online (Sandbox Code Playgroud)