如何捕获Perl中位于字符串区域两侧的区域?

问题描述

我想知道是否有任何Perl函数充当substr的逆函数。如果substr选择了由坐标定义的字符串的一部分,则此函数将跳过该部分,而是捕获位于给定坐标旁的字符串部分。

可以使用substr完成每个侧面所需的坐标,但是我想知道在这种情况下是否内置一些东西。

解决方法

最简单,最快的方法可能是使用四参数子字符串。

use strict;
use warnings;
use feature 'say';

my $orig    = 'aaabbbccc';

my $middle  = substr( $orig,3,3 );

substr( my $flanks = $orig,'/' );

say $orig;    # aaabbbccc
say $middle;  # bbb
say $flanks;  # aaa/ccc

如果您不想在输出中使用斜杠,请使用substr( my $flanks = $orig,'' )

,

如果添加一些Perl逻辑,则可以使用substr()处理。 substr()可通过添加空字符串作为REPLACEMENT来删除部分字符串,如documentation所示:

substr EXPR,OFFSET,LENGTH,替换

例如,您可以执行以下操作:

my $org = "foo bar baz";
my $flank = $org;
my $mid = substr($flank,4,'');
print "Original: $org\nMid: $mid\nFlank: $flank\n";

将打印以下内容:

Original: foo bar baz
Mid: bar
Flank: foo  baz