$re = '/\'((?:([^\']*?)\\\\\'[^\']*?)*?)\'|(?:\\\\\')[^\']*\'([^\']*)\'|\'([^\']*?)\'/m';
$str = '\'test\'
more\'test\'
\'test\'more
\\\'no\'yes\'
a \'one\' and \'two\' and \'three\'...
nothing at all
\'\'
\'\'test
test\'\'
te\'\'st
\'This is not wrong\' and \'this isn\\\'t either\'
\'tw\\\'o repl\\\'acements\' in \'t\\\'wo stri\\\'ngs\'.
\'\\\\\'\'
\'\'\'
\'test1\'\\n\'test2\'
\'\'\'\'
[^\\\\]\'([^\']*)\'|
{;nF, yy]fKAf<6H]T74R}1k#HUIc|]Rqz-Ce72-D%vz&Nm rw=81:1_Y&e,34pL.amQmAoj*m;6ObGN]#u71j%+H\\\'}4}b~|nTy]<B7umVMx;tN%QUPY=P`67F4Rert4Cy\'PMOJwnmc2s\\\'4f<EEmh,yj3Uf/u[lbc/dAgl*Xd%oY,T;+\\"2_f{BzP`.#v(yGtX\\\'O+4eU[P.3&1s+ xm!
PMOJwnmc2s';
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