如何在Perl中的字符串中插入文本?

时间:2009-03-15 11:49:46

标签: perl insert variables

如果我有:

$foo= "12."bar bar bar"|three";

如何在变量?

中的文本12之后插入文本“..”

3 个答案:

答案 0 :(得分:18)

Perl允许您选择自己的引号分隔符。如果您发现需要在插值字符串(即"")内部使用双引号或在非插值字符串(即'')内使用单引号,则可以使用quote operator指定一个不同的字符作为字符串的分隔符。分隔符有两种形式:括号内和非括号内。括号内的分隔符具有不同的开头和结尾字符:[]{}()[]<>。所有其他字符*均可作为未括号的分隔符。

所以你的例子可以写成

$foo = qq(12."bar bar bar"|three);

在“12.”之后插入文字可以通过多种方式完成(TIMTOWDI)。一个常见的解决方案是使用substitution来匹配您要替换的文本。

$foo =~ s/^(12[.])/$1../;

^表示在sting开始时匹配,()表示将此文本捕获到变量$112只匹配字符串"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"