regex - 我怎样才能重复一个 Perl 正则表达式直到没有任何变化?

标签 regex perl

我正在尝试编写一个简单的命令行脚本来修复一些空白,并且需要用制表符替换出现的两个空格,但前提是它出现在行的开头(仅以其他制表符为前缀。)

我想出了 s/^(\t*)/\1\t/g; 如果我通过多次传递,它会完美地工作,但我对 perl 了解不够知道如何循环直到字符串没有改变,或者是否有正则表达式方法来处理它。

我唯一的想法是使用 lookbehind 但它不能是可变长度的。如果非正则表达式的解决方案足够短以适应快速命令行脚本,我愿意接受它。

作为引用,当前的 perl 脚本是这样执行的:

perl -pe 's/^(\t*)  /$1\t/g'

最佳答案

检查 a very similar question .

您可以使用 1 while s/^(\t*)/$1\t/g; 来重复该模式,直到没有要进行的更改为止。

关于regex - 我怎样才能重复一个 Perl 正则表达式直到没有任何变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5459053/

相关文章:

c# - 正则表达式 - 如何创建

macos - 在 Mac 上安装 BerkeleyDB Perl 模块时出错

windows - HTML::TreeBuilder 中的内存泄漏

perl - 如何在 Perl 程序中暂时抑制 STDOUT?

java - 在Java中查找具有连续字符的字符串

C# 正则表达式

regex - 使用grep的正则表达式问题

javascript - Javascript 中的正则表达式无需回溯即可找到由 @ 包围的数字

mysql - 如何通过 DBI 重新使用 WHERE 子句逻辑?

perl - 如何使用 WWW::Mechanize 保存图像的宽度、高度和字节?