【发布时间】:2020-10-27 10:39:24
【问题描述】:
我想知道是否有任何 Perl 函数可以作为 substr 的逆函数。如果substr 选择了由坐标定义的字符串的一部分,此函数将跳过这部分,而是捕获给定坐标两侧的字符串部分。
这可以通过使用substr 来完成,并带有我想要的每个侧面的坐标,但我想知道是否有针对这种情况的内置功能。
【问题讨论】:
-
你能举个具体的例子吗? (“对于这些输入,我希望得到这个输出”)
我想知道是否有任何 Perl 函数可以作为 substr 的逆函数。如果substr 选择了由坐标定义的字符串的一部分,此函数将跳过这部分,而是捕获给定坐标两侧的字符串部分。
这可以通过使用substr 来完成,并带有我想要的每个侧面的坐标,但我想知道是否有针对这种情况的内置功能。
【问题讨论】:
最简单最快的方法可能是使用四参数子串。
use strict;
use warnings;
use feature 'say';
my $orig = 'aaabbbccc';
my $middle = substr( $orig, 3, 3 );
substr( my $flanks = $orig, 3, 3, '/' );
say $orig; # aaabbbccc
say $middle; # bbb
say $flanks; # aaa/ccc
如果您不想在输出中出现斜线,那么substr( my $flanks = $orig, 3, 3, '' )。
【讨论】:
这可以用substr() 处理,如果你添加一些 Perl 逻辑。 substr() 可用于删除部分字符串,方法是添加一个空字符串作为 REPLACEMENT,如 documentation 中所示:
substr EXPR,OFFSET,LENGTH,替换
例如,您可以这样做:
my $org = "foo bar baz";
my $flank = $org;
my $mid = substr($flank, 4, 3, '');
print "Original: $org\nMid: $mid\nFlank: $flank\n";
哪个会打印这个:
Original: foo bar baz
Mid: bar
Flank: foo baz
【讨论】: