#!/usr/bin/perl -w use strict; my $input = '[S [NP This NP] [VP is [NP [NP the turning point NP] ' . '[PP to [NP the left NP] PP] NP] VP] . S]'; $input =~ s/^\[S\s*(.*?)\s*S\]$/$1/; my $bracket_count = 0; my @output; my $build_var; foreach (split(//, $input)) { $build_var .= $_; if (/\[/) { $bracket_count++; } elsif (/\]/) { $bracket_count--; } if ($bracket_count == 0) { push @output, $build_var if ($build_var ne ' '); $build_var = ''; } } foreach (@output) { print '"', $_, '"', "\n"; }