use strict; use warnings; use 5.010; for (qw/'abc' "abc" 'abc"/) { if (/(?['"])(?(?:(?!\k).)+)\k/s) { say $+{content}; } else { say "Not matched: $_"; } } __END__ abc abc Not matched: 'abc"