$re = '/(?:APR|April)\ *\d+(?:[nr]d|th|st)?(?:-\d+(?:[nr]d|th|st)?)?|\d+(?:[nr]d|th|st)?(?:-\d+(?:[nr]d|th|st)?)?\ *(?:APR|April)/m';
$str = 'some garbagde . some garbagde 02 APR some garbagde
some garbagde . some garbagde APR 02 some garbagde
some garbagde . some garbagde 2 APR some garbagde
some garbagde . some garbagde APR 2 some garbagde
some garbagde . some garbagde 2nd APR some garbagde
some garbagde . some garbagde APR 2nd some garbagde
some garbagde . some garbagde 2nd April some garbagde
some garbagde . some garbagde April 2nd some garbagde
some garbagde . some garbagde APR 12th some garbagde
some garbagde . April 12th some garbagde
some garbagde . 12th April some garbagde
some garbagde . April 13-16 some garbagde
some garbagde . 13-16 April some garbagde
some garbagde . APR 13-16 some garbagde
some garbagde . 13-16 APR some garbagde
some garbagde . April 13th-16th some garbagde
some garbagde . 13th-16th April some garbagde
some garbagde . APR 13th-16th some garbagde
some garbagde . 13th-16th APR some garbagde';
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