$re = '/^(?=.*key1=[a-z0-9,]*d[1-4])(?=.*(?:key1=[a-z0-9,]*a[12]|key2=[a-z0-9,]*b[123]|key3=[a-z0-9,]*c[123])).+/m';
$str = 'key1=a2,d3
key2=b1,b3key1=d1
key2=b2key3=c3,a2key1=d4
key1=d2abckey2=b2,b3key1=a1
key1=d2
key1=a1key2=b1
key2=b2key3=a1
key1=a2,d3
key1=d3,a2';
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