如果我有:
$foo= "12."bar bar bar"|three";
如何在变量?
中的文本12之后插入文本“..”答案 0 :(得分:18)
Perl允许您选择自己的引号分隔符。如果您发现需要在插值字符串(即""
)内部使用双引号或在非插值字符串(即''
)内使用单引号,则可以使用quote operator指定一个不同的字符作为字符串的分隔符。分隔符有两种形式:括号内和非括号内。括号内的分隔符具有不同的开头和结尾字符:[]
,{}
,()
,[]
和<>
。所有其他字符*
均可作为未括号的分隔符。
所以你的例子可以写成
$foo = qq(12."bar bar bar"|three);
在“12.”之后插入文字可以通过多种方式完成(TIMTOWDI)。一个常见的解决方案是使用substitution来匹配您要替换的文本。
$foo =~ s/^(12[.])/$1../;
^表示在sting开始时匹配,()
表示将此文本捕获到变量$1
,12
只匹配字符串"12"
,并且[]
意味着匹配括号内的任何一个字符。正在使用括号,因为.
一般在正则表达式中具有特殊含义,但不在字符类([]
)内。字符类的另一个选项是使用.
来逃避\
的特殊含义,但很多人发现它比字符类更丑。
$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";
*
除了空格字符(空格,制表符,回车符,换行符,垂直制表符和换页符)之外的所有字符
答案 1 :(得分:0)
如果要在Perl中的字符串中使用双引号,则有两个主要选项:
$foo = "12.\"bar bar bar\"|three";
或:
$foo = '12."bar bar bar"|three';
第一个选项使用反斜杠转义字符串中的引号。
第二个选项使用单引号。这意味着双引号被视为字符串的一部分。但是,在单引号中,所有内容都是字面值,因此$var
或@array
不会被视为变量。例如:
$myvar = 123;
$mystring = '"$myvar"';
print $mystring;
> "$myvar"
可是:
$myvar = 123;
$mystring = "\"$myvar\"";
print $mystring;
> "123"
您可以使用大量其他Quote-like Operators。
答案 2 :(得分:0)
$foo = "12.\"bar bar bar\"|three";
$foo =~s/12\./12\.\.\./;
print $foo; # results in 12...\"bar bar bar\"|three"