【问题标题】:How to capture regions flanking string region in Perl?如何在 Perl 中捕获位于字符串区域两侧的区域?
【发布时间】:2020-10-27 10:39:24
【问题描述】:

我想知道是否有任何 Perl 函数可以作为 substr 的逆函数。如果substr 选择了由坐标定义的字符串的一部分,此函数将跳过这部分,而是捕获给定坐标两侧的字符串部分。

这可以通过使用substr 来完成,并带有我想要的每个侧面的坐标,但我想知道是否有针对这种情况的内置功能。

【问题讨论】:

  • 你能举个具体的例子吗? (“对于这些输入,我希望得到这个输出”)

标签: perl substr


【解决方案1】:

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

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, '' )

【讨论】:

    【解决方案2】:

    这可以用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多