$re = '/^(?:(?:(?:mdmcomm|checkin)\.(?:eu|us|jp)|(?:e(?:ba|df|pns)|msp|identity|repository|(?:(?:eu|us|jp)02\.)?protect|(?:(?:eu|us|jp)\.)?mdm)|(?:.*\.a\.ecaserver))|(redirector))\.eset\.(?(1)systems$|com$)?/mi';
$str = 'eba.eset.com
edf.eset.com
epns.eset.com
msp.eset.com
identity.eset.com
repository.eset.com
*.a.ecaserver.eset.com
protect.eset.com
eu02.protect.eset.com
us02.protect.eset.com
jp02.protect.eset.com
redirector.eset.systems
eu.mdm.eset.com
us.mdm.eset.com
jp.mdm.eset.com
mdm.eset.com
checkin.eu.eset.com
checkin.us.eset.com
checkin.jp.eset.com
mdmcomm.eu.eset.com
mdmcomm.us.eset.com
mdmcomm.jp.eset.com
';
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