如何拆分字符串并将拆分部件上的拆分令牌用作前缀

时间:2013-10-03 13:07:41

标签: regex string perl

如果我想用正则表达式拆分字符串,我怎样才能获得拆分器字符串以及我们拆分的部分作为前缀?
例如。如果我有:“BlaBla主题文学bla bla主题数学bla bla” 我想拆分主题,并将主题作为分配器字符串以及如何做到这一点? 例如。 split ('Topic[^:]', $string)
将返回:Literature bla bla但我想返回拆分拆分器字符串中匹配的任何内容。我该怎么做?

4 个答案:

答案 0 :(得分:3)

我猜你的意思是你想在结果字符串中保留拆分分隔符,如下所示:

BlaBla
Topic Literature bla bla
Topic Math bla bla

在这种情况下,您可以使用先行断言:

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

<强>输出:

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

因为前瞻断言是零长度,所以当它匹配时它不会消耗字符串的任何部分。

答案 1 :(得分: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'
        ];

答案 2 :(得分:0)

使用正向前瞻断言:

分裂( “(=主题?[^:])”,$输入)

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';

答案 3 :(得分:0)

使用非捕捉前瞻:

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

.....

主题文学.....

主题数学.....