while ($test =~ m%\Q[ref]\E(?:(?!\Q[/ref]\E).)*\Q[/ref]\E%gix) { print "FOO, $1, $2 and $3 \n"; } #### while ($test =~ m%\Q[ref]\E[^[]*(?:\[(?!\Q/ref]\E)[^[]*)*\Q[/ref]\E%gix) { print "FOO, $1, $2 and $3 \n"; }