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