$re = '/\'([^\'}{\\\\]*(?:\\\\\')?[^\'}{\\\\]*)\'(?=(?:[^\'}{\\\\]*(?:\'[^\'}{\\\\]*(?:\\\\\')?[^\'}{\\\\]*\'?)?[^\'}{\\\\]*)\})/m';
$str = '\'dont want\' don\\\'t want {dont want \'want this\', \'want this, je m\\\'appelle Robert\', dont want} don\\\'t want \'dont want\' {\'want this\'}
\'dont want\' and \'don\\\'t want\'
{\'want this\' and \'want this, je m\\\'appelle Robert\'}';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php