regex - 是否可以用单个 s///指定迭代替换过程?

标签 regex perl

假设我们想用 000 替换出现在 第一个 字符之前的 1 的每个实例,该字符既不是 01

例如,如果原始字符串是

"0011101TUVW0123ABC0123"

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

"000000000000000TUVW0123ABC0123"

在 Perl 5 中,假设 $_ 保存输入字符串,那么像这样的东西就可以解决问题:

'*任何*你喜欢的常量!'而 s/^(0*)1/${1}000/;

此方法只是不断应用相同的替换规则 (s/^(0*)1/${1}000/) 直到它“收敛”(即停止更改输入)。

我想知道是否有一个s/// 替换使得它的单个 应用程序达到相同的结果。 (想一想s/1/000/g单个 应用程序能够替换 出现的1000。)


请注意,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/

相关文章:

java - 无效的 java 正则表达式转义序列未在 Eclipse 中标记

javascript - Javascript 中字符串的正则表达式

javascript - Perl CGI 和 JavaScript |选择选项的烦恼

windows - 在 Windows 上是否有可以与 C 和 Perl 一起使用的**轻量级** IDE?

linux - 传递其中包含点运算符的命令行参数

Javascript 尝试/捕捉

javascript - 为什么此代码卡在 node.js - Javascript 上的错误?

php - 无法让 Php 路由器发送正确的 header

c - pthreads中的perlemed

ruby - 计算 Perl 或 Ruby 中重叠的正则表达式匹配项