我正在学习Perl,所以请耐心等待我这个noob问题.
如何在字符串中重复一次字符n次?
我想做类似下面的事情:
$numOfChar = 10; s/^\s*(.*)/' ' x $numOfChar$1/;
kixx.. 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;
小智.. 15
您的正则表达式可以写成:
$numOfChar = 10; s/^(.*)/(' ' x $numOfChar).$1/e;
但是 - 你可以这样做:
s/^/' ' x $numOfChar/e;
或者根本不使用正则表达式:
$_ = ( ' ' x $numOfChar ) . $_;
Chris Lutz.. 8
你是对的.Perl的x
运算符多次重复一个字符串.
print "test\n" x 10; # prints 10 lines of "test"
编辑:要在正则表达式中执行此操作,将值分配给另一个变量可能是最好的(也称为最友好的维护者).
my $spaces = " " x 10; s/^\s*(.*)/$spaces$1/;
有一些方法可以在没有额外变量的情况下完成,但只需要0.02美元,如果你这样做就会更容易维护.
编辑:我修复了我的正则表达式.对不起我第一次没看对.
默认情况下,替换采用字符串作为要替换的部分.要在替换过程中执行代码,您必须使用该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;
您的正则表达式可以写成:
$numOfChar = 10; s/^(.*)/(' ' x $numOfChar).$1/e;
但是 - 你可以这样做:
s/^/' ' x $numOfChar/e;
或者根本不使用正则表达式:
$_ = ( ' ' x $numOfChar ) . $_;
你是对的.Perl的x
运算符多次重复一个字符串.
print "test\n" x 10; # prints 10 lines of "test"
编辑:要在正则表达式中执行此操作,将值分配给另一个变量可能是最好的(也称为最友好的维护者).
my $spaces = " " x 10; s/^\s*(.*)/$spaces$1/;
有一些方法可以在没有额外变量的情况下完成,但只需要0.02美元,如果你这样做就会更容易维护.
编辑:我修复了我的正则表达式.对不起我第一次没看对.