0

文字列を正規表現で分割したい場合、スプリッター文字列を取得し、分割した部分をプレフィックスとして取得するにはどうすればよいですか?
たとえば、「BlaBla Topic Literature bla bla Topic Math bla bla」
があり、Topic で分割し、分割文字列として Topic を取得するにはどうすればよいですか?
split ('Topic[^:]', $string)
: が返されます: しかし、分割Literature bla bla分割文字列で一致したものは何でも返したいです。それ、どうやったら出来るの?

4

4 に答える 4

3

I am guessing you mean that you want to keep the split delimiter in the resulting strings, like so:

BlaBla
Topic Literature bla bla
Topic Math bla bla

In which case you can use a lookahead assertion:

use Data::Dumper;
my $str = "BlaBla Topic Literature bla bla Topic Math bla bla";
my @result = split /(?<=Topic[^:])/, $str;
print Dumper \@result;

Output:

$VAR1 = [
          'BlaBla ',
          'Topic Literature bla bla ',
          'Topic Math bla bla'
        ];

Because the lookahead assertion is zero-length, it does not consume any part of the string when it matches.

于 2013-10-03T13:21:01.917 に答える
0

非キャプチャ先読みを使用します。

perl -le "$s='BlaBla Topic Literature bla bla Topic Math bla bla';print $_ for split '(?=Topic[^:])', $s"

.....

トピック文学 .....

トピック 数学 .....

于 2013-10-03T13:19:48.160 に答える
0

肯定的な先読みアサーションを使用します。

split("(?=トピック[^:])",$input)

use Data::Dumper;
$x="BlaBla Topic Literature bla bla Topic Math bla bla";
@y=split("(?=Topic[^:])",$x);
print Dumper(@y);'

$VAR1 = 'BlaBla ';
$VAR2 = 'Topic Literature bla bla ';
$VAR3 = 'Topic Math bla bla';
于 2013-10-03T13:19:22.740 に答える
0

分割を括弧で囲んで、それもキャプチャします。

#!/usr/bin/perl
use strict;
use Data::Dumper;

my $file = "BlaBla Topic Literature bla bla Topic Math bla bla";

my (@new) = split('(Topic[^:])', $file);


print Dumper \@new;

出力:

$VAR1 = [
          'BlaBla ',
          'Topic ',
          'Literature bla bla ',
          'Topic ',
          'Math bla bla'
        ];
于 2013-10-03T13:13:47.227 に答える