Perl 如何在字符串中重复一个字符n次?
我正在学习Perl,所以请容忍我的这个noob问题 如何在字符串中重复一个字符n次 我想做如下事情:Perl 如何在字符串中重复一个字符n次?,perl,Perl,我正在学习Perl,所以请容忍我的这个noob问题 如何在字符串中重复一个字符n次 我想做如下事情: $numOfChar = 10; s/^\s*(.*)/' ' x $numOfChar$1/; 你说得对。Perl的x运算符将字符串重复多次 print "test\n" x 10; # prints 10 lines of "test" 编辑:要在正则表达式中执行此操作,最好(也称为对维护人员最友好的)将值赋给另一个变量 my $spaces = " " x 10; s/^\s*(.*
$numOfChar = 10;
s/^\s*(.*)/' ' x $numOfChar$1/;
你说得对。Perl的
x
运算符将字符串重复多次
print "test\n" x 10; # prints 10 lines of "test"
编辑:要在正则表达式中执行此操作,最好(也称为对维护人员最友好的)将值赋给另一个变量
my $spaces = " " x 10;
s/^\s*(.*)/$spaces$1/;
有很多方法不需要额外的变量就可以做到这一点,但是如果这样做的话,我的$0.02就更容易维护了
编辑:我修正了我的正则表达式。很抱歉,我第一次读错了。您的正则表达式可以写成:
$numOfChar = 10;
s/^(.*)/(' ' x $numOfChar).$1/e;
但是,您可以通过以下方式实现:
s/^/' ' x $numOfChar/e;
或者根本不使用regexp:
$_ = ( ' ' x $numOfChar ) . $_;
默认情况下,替换将字符串作为要替换的部分。要在替换过程中执行代码,必须使用
e
标志
$numOfChar = 10;
s/^(.*)/' ' x $numOfChar . $1/e;
这将在文本开头添加$numochar
空格。要对文本中的每一行执行此操作,请使用-p
标志(用于快速、单行处理):
或者,如果它是较大脚本的一部分,则使用-g
和-m
标志(-g
表示全局,即重复替换和-m
使^
在每行开头匹配):
那没用。我想它只在打印语句中起作用。我正在尝试类似的东西。s/^(.*)/‘p’x$numochar/;我已经修改了我的问题。您是否收到任何错误消息?请注意,此答案不再适用,因为chappar在给出此答案后在其问题中添加了一个“\s*”。目前,没有一个答案真正适用。但它很容易修复。只需更改:s/^/''x$numochar/e;放入:s/^\s*/''x$numochar/e;
cat foo.txt | perl -p -e "$n = 10; s/^(.*)/' ' x $n . $1/e/" > bar.txt
$n = 10;
$text =~ s/^(.*)/' ' x $n . $1/mge;