Perl在定义的模式位置分裂

时间:2012-08-04 13:05:39

标签: regex perl split

有没有办法通过使用perl split函数来破坏模式的定义位置的字符串?例如,通过使用@array=split(/pattern/, $string),得到一个拆分$string数组,但该数组中缺少由pattern定义的字符串部分。是否可以指定要分割的模式的哪个位置,以便$string中包含所有初始@array

2 个答案:

答案 0 :(得分:6)

在您的示例中,您似乎希望在tg之后和gg之前分割。

由于split使用正则表达式,因此您可以使用环视断言

Extended Patterns in perlre

下了解它们

例如

use strict;
use warnings;

my $s = 'aaaatgggccc';

my @fields = split /(?<=tg)(?=gg)/, $s;

print "$_\n" for @fields;

<强>输出

aaaatg
ggccc

答案 1 :(得分:0)

@Mat的答案很好,可能就是我要用的。但是,为了完整起见,还有另一种方法可能适合:

my $pattern = qr/MY_PATTERN/;
my @array   = /($pattern)($string)?/g;

/g修饰符会导致模式重复匹配。 ?是可选的,具体取决于您希望实现的精确效果。