$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\'
\'\'\'\'
GVNBR!a4GO\'Ic1>7E<9?l)gaj0%4*{dX2+6s&__F8-IZk.^|A528/!fc_b#<uO0C[Vod;ws0eqL$#(J28>d^l#421[6EwbnZH/zTP>\\",&e&Qx^K!yd2!dX;z.,r)Qb2=f0Xz**R |DB?NOUAG6yvGU1bX`m5hE@/\\"uIm=hp{K]17L-L5v=eI#!{Q^O5To1!0sJ!{kl~_yV&N&=oTr$?Ou[niG"\'D0"/ZJZUey3{O04JkM8j/S7\\"wqs&LhHBxxnX/l}*1-rF)ou/JeWx-*C!Sp1db|1Tcd6xYf f
{;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!
';
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