Perl:如何使用起始字符拉出所需的字符串,但也需要包含它们?

时间:2016-11-21 15:24:54

标签: regex perl

我有这个字符串

my $word = "Chase_^%798(987%55,.#*&^*&Chase_$&^**&(()%%hjjlhh";

所需的输出

Chase_^%798(987%55,.#*&^*&
Chase_$&^**&(()%%hjjlhh

字符串"Chase_"是我应该将它们分开的唯一线索。使用split我丢失了字符串"Chase_"。然后我应该连接它们。我对如何分割它没有任何想法,但也应该出现字符串"Chase_"

2 个答案:

答案 0 :(得分:11)

使用lookahead

my $str = 'Chase_^%798(987%55,.#*&^*&Chase_$&^**&(()%%hjjlhh';
my @list = split(/(?=Chase_)/, $str);
say Dumper\@list;

<强>输出:

$VAR1 = [
          'Chase_^%798(987%55,.#*&^*&',
          'Chase_$&^**&(()%%hjjlhh'
        ];

答案 1 :(得分:2)

如果您使用分组正则表达式进行分组,则不会丢失(单个&#34; o&#34;)。此外,如果您拆分字符串文字,而不是模式,则无需提取它:

#! /usr/bin/perl
use warnings;
use strict;

my $word = 'Chase_^%798(987%55,.#*&^*&Chase_$&^**&(()%%hjjlhh';

my @parts1 = split /(Chase_)/, $word;
for (my $i = 1; $i < $#parts1; $i += 2) {
    print @parts1[ $i, $i + 1 ], "\n";
}

print "--------\n";

my @parts2 = split /Chase_/, $word;
print 'Chase_', $_, "\n" for @parts2[ 1 .. $#parts2 ];