在每行的开头添加空格数(在一个字符串内)

Tor*_*örn 4 regex perl

这是Perl的一个后续问题:在一行开头添加字符.

情况
在现有的Perl脚本中,我有一个合理的长字符串,$str其中包含未知数量的换行符(\n).现在在字符串的末尾有换行符.

$str = "Hello\nWorld.\nHow is it going?"
Run Code Online (Sandbox Code Playgroud)

问题
我想在字符串中每行的开头添加一定数量的(常量)空格:(在本例中为3)

$str = "   Hello\n   World.\n   How is it going?"
Run Code Online (Sandbox Code Playgroud)

第一种方法 我的第一种方法是以下RegEx

$str =~ s/(.*?\n)/   \1/g;
Run Code Online (Sandbox Code Playgroud)

并缓存最后一行,它不是由新行终止的

$str =~ s/(.*)\n(.*)?$/\1\n   \2/g;
Run Code Online (Sandbox Code Playgroud)

愿望
第一.以上几行完美无缺,完全符合我的意图.但.我知道,RegEx是强大的,因此我很确定,只需一个简短的RegEx就可以做同样的事情.不幸的是,我还没有实现这一目标.(这很有可能,我认为太复杂了.)

那么,人们对这个问题有什么可能性呢?
谢谢你的回答.

mar*_*ton 6

改为匹配每一行的开头,或许:

$str =~ s/^/   /mg;
Run Code Online (Sandbox Code Playgroud)

来自perlre:

  • ^ - 匹配行的开头.
  • m- 处理字符串多行,^$匹配行开头和结束字符串中的任何位置,而不仅仅是整个开头和结尾.
  • g - 全局 - 适用于找到的每场比赛.