2013-05-29 4 views
4

Облицовочные проблема с регулярным выражениемPHP регулярное выражение вопрос preg_match() временные отметки

2013-05-29 15:15:12 струна Я соответствие с /^(\d{4})-(\d{2})-(\d{2})({\s}+(\d{2}):(\d{2}):(\d{2}))?$/ с preg_match, но не проверка ... его подачи false.

Что должен быть регулярным выражением для совпадения 2013-05-29 15:15:12 или 2013-05-29 узора.

+0

Вы уверены, что нет никаких паразитных пробелы до или после строки ? –

ответ

5

Давайте посмотрим на ваше регулярное выражение. Между датой и временем, которое вы соответствуете {\s}+. Это означает «символ {, за которым следует пробел/табуляция, за которым следует один или несколько }».

Заменить {\s} с ?:\s+ (а не группа записи соответствие один или несколько пробелов/вкладки), так что полный регулярное выражение является

^(\d{4})-(\d{2})-(\d{2})(?:\s+(\d{2}):(\d{2}):(\d{2}))?$ 

DEMO

+2

Вы нашли время, чтобы продемонстрировать это, поставив вас несправедливо позади. +1. –

+0

Что делает **?: ** do in^(\ d {4}) - (\ d {2}) - (\ d {2}) (?: \ S + (\ d {2}): (\ d {2}): (\ d {2}))? $ –

+1

@PoonamBhatt Указывает «не захватывающая группа», то есть мы не сохраним совпадение при сопоставлении (теперь у вас есть только 6 совпадений, 'year',' month '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' случается. – h2ooooooo

2

{\s}+ неправ. Он должен быть \s+. Кудрявые скобки используются только как кванторы или литералы.

Смежные вопросы