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