【发布时间】:2009-03-22 08:23:30
【问题描述】:
我正在学习 Perl,所以请耐心等待这个菜鸟问题。
如何在一个字符串中重复一个字符 n 次?
我想做如下的事情:
$numOfChar = 10;
s/^\s*(.*)/' ' x $numOfChar$1/;
【问题讨论】:
-
您是否收到任何错误消息?
标签: perl
我正在学习 Perl,所以请耐心等待这个菜鸟问题。
如何在一个字符串中重复一个字符 n 次?
我想做如下的事情:
$numOfChar = 10;
s/^\s*(.*)/' ' x $numOfChar$1/;
【问题讨论】:
标签: perl
默认情况下,替换将字符串作为要替换的部分。要在替换过程中执行代码,您必须使用 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 美元,它会更容易维护。
编辑:我修复了我的正则表达式。抱歉我第一次没看清楚。
【讨论】: