Это должно работать для извлечения упомянутых дат из текста:
preg_match_all('/(^|\s+)(\d{4}|\'\d{2}|(january|february|march|april|may|june|july|august|september|october|november|december) \d{2})(\s+|$)/i', $text, $matches);
Это тоже пришло мне в голову (это дает пользователю немного больше свободы):
preg_match_all('/(^|\s+)((january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)?(\s|\s?\')(\d{2}|\d{4}))(\s+|$)/i', $text, $matches);
Все вышеперечисленное будет проще при разборе нескольких выражений.Зачем вам нужен один?
Если вы просто хотите проанализировать строку, которая не содержит ничего, кроме этого, вы должны использовать PHP-функцию strtotime()
-101 * *.