Sas*_*dar 7 php regex datetime date
首先请原谅我不是那么熟悉正则表达式.我想要的是一个正则表达式,它将从任何类型的字符串中提取类似mysql日期的日期.直到现在我才使用这个:^[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位数的结果.
换句话说,刺痛开始于,yyyy-mm-dd
并且后跟空格字符数字或任何东西.如何提取日期?
UPDATE
我在这里使用preg_match测试正则表达式:http://www.pagecolumn.com/tool/pregtest.htm
到目前为止,唯一似乎有用的是
[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])
Run Code Online (Sandbox Code Playgroud)
如果你的字符串有多个日期格式值出现,并且你想要捕获所有这些,你应该使用preg_match_all
函数,如果它preg_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
)
*/
Run Code Online (Sandbox Code Playgroud)
试试这个:你可以使用preg_match()
或preg_match_all()
$dateArray = preg_match("/(\d{4}-\d{2}-\d{2})/", $str, $match);
Run Code Online (Sandbox Code Playgroud)
$date = date('Y-m-d',strtotime($match[0]));
Run Code Online (Sandbox Code Playgroud)
要匹配出现在任意位置的日期,请从原始正则表达式中删除$
和锚点。^
要匹配任何输入开头的日期,请删除$
结尾处的 (保留^
)。
为了方便起见,您还可以将剩余的模式放在括号内,以便将匹配作为一个整体进行捕获。
您建议的改进在末尾有一个假点,它可以匹配任何字符;这就是以三位数天数返回比赛的原因。