in reply to Complex Splitting
which prints:use strict; use warnings; use Regexp::Common qw(balanced); my @streams = (qw( [ABC][DEF][HIJ] ABC[DEF]HI[JK][LMNO]PQ [A][B]C[DEF]HI[JK][LMNO]PQ [A][B]C[DEF]HI[JK][LMNO]P[Q] [ABCDEFHIJKLMNOPQ] ABCDEF ), q()); my $PATTERN = $RE{balanced}{-parens=>'[]'}; for my $input (@streams) { print qq($input => ); my @pieces = (); while ($input =~ s/(\w*)($PATTERN)//) { my ($prematch, $match) = ($1, $2); push @pieces, split //, $prematch; push @pieces, $1 if $match =~ /(\w+)/; } push @pieces, split //, $input if length $input; printf qq(%s\n), join qq( ), @pieces; } __END__
Cheers.[ABC][DEF][HIJ] => ABC DEF HIJ ABC[DEF]HI[JK][LMNO]PQ => A B C DEF H I JK LMNO P Q [A][B]C[DEF]HI[JK][LMNO]PQ => A B C DEF H I JK LMNO P Q [A][B]C[DEF]HI[JK][LMNO]P[Q] => A B C DEF H I JK LMNO P Q [ABCDEFHIJKLMNOPQ] => ABCDEFHIJKLMNOPQ ABCDEF => A B C D E F =>
|
|---|