我正在学习Perl,所以请耐心等待我这个noob问题。
如何在字符串中重复n次?
我想做类似下面的事情:
$numOfChar = 10;
s/^\s*(.*)/' ' x $numOfChar$1/;
答案 0 :(得分:25)
默认情况下,替换采用字符串作为替换部分。要在替换过程中执行代码,您必须使用e
标志。
$numOfChar = 10;
s/^(.*)/' ' x $numOfChar . $1/e;
这会将$numOfChar
空格添加到文本的开头。要对文本中的每一行执行此操作,请使用-p
标记(用于快速,单行处理):
cat foo.txt | perl -p -e "$n = 10; s/^(.*)/' ' x $n . $1/e/" > bar.txt
或者如果它是较大脚本的一部分,请使用-g
和-m
标记(-g
表示全局,即重复替换,-m
制作^
}匹配每行的开头):
$n = 10;
$text =~ s/^(.*)/' ' x $n . $1/mge;
答案 1 :(得分:15)
您的正则表达式可以写成:
$numOfChar = 10;
s/^(.*)/(' ' x $numOfChar).$1/e;
但是 - 你可以用:
s/^/' ' x $numOfChar/e;
或者根本不使用正则表达式:
$_ = ( ' ' x $numOfChar ) . $_;
答案 2 :(得分:8)
x
运算符多次重复一个字符串。
print "test\n" x 10; # prints 10 lines of "test"
编辑:要在正则表达式中执行此操作,将值分配给另一个变量可能是最好的(也是最友好的维护者)。
my $spaces = " " x 10;
s/^\s*(.*)/$spaces$1/;
有一些方法可以在没有额外变量的情况下完成,但只需要0.02美元,如果你这样做就会更容易维护。
编辑:我修正了我的正则表达式。对不起,我第一次没看错。