Это в точности соответствует вашей спецификации, которая допускает что-либо в качестве значения месяца.
Как видите, я сгруппировал каждую часть даты, чтобы вы могли ее легко переформатировать.
Если строка не совпадает, $ m будет 0.
linux-t77m:/home/vinko$ more preg.php
<?php
$d = "10 Jul 2010 15:00";
$m = preg_match("/(\d{2})\s([a-z]{3})\s(\d{4})\s(\d{2}):(\d{2})/i",$d,&$matches);
print_r($matches);
?>
linux-t77m:/home/vinko$ php preg.php
Array
(
[0] => 10 Jul 2010 15:00
[1] => 10
[2] => Jul
[3] => 2010
[4] => 15
[5] => 00
)
Чтобы убедиться, что у вас есть только действительные месяцы, вы можете использовать вместо этого регулярное выражение
$m = preg_match("/(\d{2})\s(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s(\d{4})\s(\d{2}):(\d{2})/i",$d,&$matches);
Но ... теперь вы соответствуете только английским месяцам.
Это скоро станет громоздким. Я настоятельно рекомендую вам использовать библиотеку обработки времени и даты и позволить ей справиться со всеми этими проблемами.