假设我们想用 000
替换出现在 第一个 字符之前的 1
的每个实例,该字符既不是 0
或 1
。
例如,如果原始字符串是
"0011101TUVW0123ABC0123"
然后所需的替换将产生字符串
"000000000000000TUVW0123ABC0123"
在 Perl 5 中,假设 $_
保存输入字符串,那么像这样的东西就可以解决问题:
'*任何*你喜欢的常量!'而 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"
最佳答案
使用\G
anchor 匹配字符串的开头或上一个匹配项之后的位置:
echo "0011101TUVW0123ABC0123" | perl -pe 's/\G0*\K1/000/g'
关于regex - 是否可以用单个 s///指定迭代替换过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530267/