Php 从任何字符串获取日期yyyy-mm-dd的正则表达式

Php 从任何字符串获取日期yyyy-mm-dd的正则表达式,php,regex,date,datetime,Php,Regex,Date,Datetime,首先,请原谅我对regex不太熟悉。我想要的是一个regex,它可以从任何类型的字符串中提取像mysql date这样的日期。 直到现在我还在使用:^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$ 然而,现在我想从其他字符串和日期时间字符串中提取日期模式,我尝试根据一些在线正则表达式测试人员将正则表达式修改为^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])。。还有一些时候,它给了我一

首先,请原谅我对regex不太熟悉。我想要的是一个regex,它可以从任何类型的字符串中提取像mysql date这样的日期。 直到现在我还在使用:
^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$

然而,现在我想从其他字符串和日期时间字符串中提取日期模式,我尝试根据一些在线正则表达式测试人员将正则表达式修改为
^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])。
。还有一些时候,它给了我一个3位数的结果

换句话说,sting以,
yyyy-mm-dd
开头,后跟空格、字符、数字或其他任何内容。如何提取日期

更新

我在这里用preg_match测试正则表达式:

到目前为止,唯一有效的办法是

[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])

要匹配出现的日期,请从原始正则表达式中删除
$
^
锚定

要匹配任何输入开始时的日期,请删除结尾处的
$
(保留
^

为了方便起见,您还可以将剩余的模式放在括号内,这样匹配也可以作为一个整体捕获


您建议的改进在末尾有一个伪点,它将匹配任何字符;这就是返回三位数天数的匹配项的原因。

如果您的字符串有多个日期表单值出现,并且您希望捕获所有日期表单值,则应使用
preg\u match\u all
函数,如果它不是
preg\u match
就足够了。另外,使用
^
$
意味着输入字符串应该只是一个日期,所以要避免它

<?php
$input_string = "yes today is 2013-10-24";
if(preg_match("/\d{4}-\d{2}-\d{2}/", $input_string, $match))
{
    print_r($match);
}
else
    echo "not matched";
////////////////////////
/* Output:
Array
(
    [0] => 2013-10-24
)
*/

只需将
^
替换为
\b

\b(\d{4}-\d{2}-\d{2})
试试这个: 您可以使用
preg\u match()
preg\u match\u all()

然后使用和


它是regexp结尾的点(它匹配任何字符,除了换行符) 尝试删除它

^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])

不,它只有一个日期对不起,我不清楚这件事。
$date = date('Y-m-d',strtotime($match[0]));
^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])