如何在字符串中重复一次字符n次?

时间:2009-03-22 08:23:30

标签: perl

我正在学习Perl,所以请耐心等待我这个noob问题。

如何在字符串中重复n次?

我想做类似下面的事情:

$numOfChar = 10;

s/^\s*(.*)/' ' x $numOfChar$1/;

3 个答案:

答案 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)

你是对的。 Perl的x运算符多次重复一个字符串。

print "test\n" x 10; # prints 10 lines of "test"

编辑:要在正则表达式中执行此操作,将值分配给另一个变量可能是最好的(也是最友好的维护者)。

my $spaces = " " x 10;
s/^\s*(.*)/$spaces$1/;

有一些方法可以在没有额外变量的情况下完成,但只需要0.02美元,如果你这样做就会更容易维护。

编辑:我修正了我的正则表达式。对不起,我第一次没看错。