#!/usr/bin/perl -l use strict; use warnings; use Text::Balanced qw(extract_delimited); my $text = 'SELECT "SELECT * FROM table1 WHERE ..." SQL FROM table2 WHERE ...'; my (undef, $remainder) = extract_delimited($text, '"', '[^"]*'); my ($extracted) = $remainder =~ /(\bFROM\b.*?\bWHERE\b)/; print $extracted; # FROM table2 WHERE