如果我有:
$foo= "12."bar bar bar"|three";
如何在变量中的文本12之后插入文本".."?
Perl允许您选择自己的引号分隔符.如果您发现需要在插值字符串(即""
)内部使用双引号或在非插值字符串内使用单引号(即''
),则可以使用引号运算符指定不同的字符作为字符串的分隔符.分隔符有两种形式:括号内和非括号内.括号内的分隔符有不同的开始和结束字符:[]
,{}
,()
,[]
,和<>
.所有其他字符*
均可作为未括号的分隔符.
所以你的例子可以写成
$foo = qq(12."bar bar bar"|three);
在"12."之后插入文本 可以通过多种方式完成(TIMTOWDI).常见的解决方案是使用替换来匹配要替换的文本.
$foo =~ s/^(12[.])/$1../;
^表示在sting开始时匹配,()
意味着将此文本捕获到变量$1
,12
刚匹配字符串"12"
,并且[]
均值匹配括号内的任何一个字符.正在使用括号,因为.
它在一般的正则表达式中具有特殊含义,但不在字符类(the []
)中.字符类的另一个选择是逃避.
with 的特殊含义\
,但很多人发现它比字符类更丑陋.
$foo =~ s/^(12\.)/$1../;
将文本插入字符串的另一种方法是将值赋给调用substr
.这突出了Perl的一个相当独特的功能:它的许多功能都可以充当左值.也就是说,它们可以像变量一样对待.
substr($foo, 3, 0) = "..";
如果您还不知道"12."
字符串中的哪个位置可以index
用来查找它的起始位置,那么length
找出"12"的长度.是,然后使用该信息substr
.
这是一个包含上述代码的功能齐全的Perl脚本.
#!/usr/bin/perl use strict; use warnings; my $foo = my $bar = qq(12."bar bar bar"|three); $foo =~ s/(12[.])/$1../; my $i = index($bar, "12.") + length "12."; substr($bar, $i, 0) = ".."; print "foo is $foo\nbar is $bar\n";
*
除了空白字符(空格,制表符,回车符,换行符,垂直制表符和换页符)之外的所有字符