Что такое шаблон регулярного выражения для datetime (2008-09-01 12:35:45)? - PullRequest
44 голосов
/ 01 сентября 2008

Что такое шаблон RegEx для DateTime (2008-09-01 12:35:45)?

Я получаю эту ошибку:

Не найдено конечного разделителя '^'

Использование:

preg_match('(?n:^(?=\d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(?(.0?2)(?=.{3,4}(1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00))|0?[1-9]|1\d|2[0-8])(?<sep>[/.-])(?<month>0?[1-9]|1[012])\2(?<year>(1[6-9]|[2-9]\d)\d{2})(?:(?=\x20\d)\x20|$))?(?<time>((0?[1-9]|1[012])(:[0-5]\d){0,2}(?i:\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$)', '2008-09-01 12:35:45');

выдает эту ошибку:

Предупреждение: preg_match () [function.preg-match]: ошибка компиляции: нечего повторять со смещением 0 в E: \ www \ index.php в строке 19

Ответы [ 11 ]

0 голосов
/ 01 сентября 2008

PHP preg-функциям нужно, чтобы ваше регулярное выражение было заключено в символ разделителя, который может быть любым символом. Вы не можете использовать этот символ разделителя без выхода из регулярного выражения. Это должно работать (здесь символ разделителя /):

preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/', '2008-09-01 12:35:45');

// or this, to allow matching 0:00:00 time too.
preg_match('/\d{4}-\d{2}-\d{2} \d{1,2}:\d{2}:\d{2}/', '2008-09-01 12:35:45');

Если вам нужно сопоставить строки, содержащие только дату и время, добавьте ^ и $ в начале и в конце регулярного выражения.

preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', '2008-09-01 12:35:45');

Ссылка на preg_match руководства PHP ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...