Простое выражение REGEX без утверждений о предварительном просмотре / обратном просмотре:
/WUB((?:[^W]|W[^U]|WU[^B])+)/g
Предполагается, что тестируемая строка заканчивается WUB. Если это не так, вы должны либо включить в конец нулевое упреждающее утверждение (? = WUB),
/WUB((?:[^W]|W[^U]|WU[^B])+)(?=WUB)/g
, либо удалить любые символы за последним WUB перед использованием регулярного выражения.
s/WUB(?:[^W]|W[^U]|WU[^B])+$/WUB/
.
#! /usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my $s = "WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB";
print Dumper ([$s =~ /WUB((?:[^W]|W[^U]|WU[^B])+)/g]);
распечатывает:
$VAR1 = [
'WE',
'ARE',
'THE',
'CHAMPIONS',
'MY',
'FRIEND'
];