Php 从任何字符串获取日期yyyy-mm-dd的正则表达式
首先,请原谅我对regex不太熟悉。我想要的是一个regex,它可以从任何类型的字符串中提取像mysql date这样的日期。 直到现在我还在使用: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])。。还有一些时候,它给了我一
^[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])