$re = '/^((?:(?:[^"\n;]*"[^"\n]*")+(?!"))?+[^"\n;]*+"?[^"\n;]*);.*/m';
$str = 'Peekaboo ; A comment starts with a semicolon and continues till the EOL
Unless the semicolon is surrounded by dquotes "Don’t do it ; here" ;but match me; once
Im not surrounded "so pay attention to me" ; "peekaboo"
Im not surrounded "so pay attention" to;me" ; "peekaboo"
Im not surrounded "so pay attention to me ; peekaboo
Dquote escapes a dquote so "dont pay attention to ""me;here"" buster" do it ; here
Don’t pay attention to """me;here""" but do ""it;here""
and "dont do ""it;here""" either ;peekaboo
but "pay attention to "it;here"" ;not here though
Simon said "I like goats" then he added "and sheep;" ;a good comment is "here
Simon said "I like goats" then he added "and sheep;" dont do it here
Simon said ""I like goats;"peekaboo
Simon said "I like goats;""peekaboo
""I like goats;"peekaboo
"I like goats;""peekaboo
"aaa ; bb"';
$subst = "$1";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
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