PHP正则表达式在时间戳上发出preg_match()

PHP正则表达式在时间戳上发出preg_match(),php,regex,Php,Regex,正则表达式面临的问题 2013-05-29 15:15:12string我正在匹配/^(\d{4})(\d{2})(\d{2})({s}+(\d{2}):(\d{2}):(\d{2}):(\d{2}))?$/与preg{u匹配,但不验证。。。它的给出false 什么应该是regexp来匹配2013-05-29 15:15:12或2013-05-29模式。{\s}+是错误的。它应该是\s+。花括号仅用作量词或文字。让我们先看看您的正则表达式。在日期和匹配的时间之间{\s}+。这意味着“字符{,后跟

正则表达式面临的问题

2013-05-29 15:15:12
string我正在匹配
/^(\d{4})(\d{2})(\d{2})({s}+(\d{2}):(\d{2}):(\d{2}):(\d{2}))?$/
preg{u匹配,但不验证。。。它的给出
false


什么应该是regexp来匹配2013-05-29 15:15:122013-05-29模式。

{\s}+
是错误的。它应该是
\s+
。花括号仅用作量词或文字。

让我们先看看您的正则表达式。在日期和匹配的时间之间
{\s}+
。这意味着“字符
{
,后跟空格/制表符,后跟一个或多个
}

{\s}
替换为
?:\s+
(一个与一个或多个空格/制表符匹配的非捕获组),以便完整的正则表达式

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

您确定字符串前后没有多余的空格吗?您花时间演示了它,不公平地将您拖在了后面+1.做什么?:在^(\d{4})-(\d{2})-(\d{2})(?:\s+(\d{2}):(\d{2}):(\d{2}):(\d{2}))中做什么?$@PoonamBhatt它指定了一个
非捕获组
,这意味着我们在匹配时不会保存匹配(现在您只有6个匹配项,
小时
分钟
,而不是将
小时:分钟:秒
作为匹配项。)尝试查看演示并删除
?:
部分,看看会发生什么。@PoonamBhatt检查并查看右侧匹配的差异。