我有两个不同的字符串:
(“baby”或“14%”或“ten”可以更改,因此我无法指定它们)
我想识别该字符串中的日期,并尝试使用:
$dt = date_parse($string);
在第一种情况下,没关系,但在第二种情况下,它无法识别日期。
我尝试没有成功
$dt = date_parse_from_format("d.m.Y", $string);
我尝试使用preg_match或preg_match_all但没有成功(我不是很擅长)。
答案 0 :(得分:6)
您可以使用正则表达式捕获日期,例如:
if(preg_match('/(.*)([0-9]{2}\.[0-9]{2}\.[0-9]{2,4})(.*)/', $yourString, $matches))
{
$date = $matches[2];
}
答案 1 :(得分:2)
你提到婴儿,14%和10可以改变。但它总是一个单词/值吗?如果是这样,你可以使用:
$split = explode(' ', $string)
$date = $split[2];
//$split[0] = Baby
//$split[1] = 14%
//$split[2] = 28.07.2012
//$date = 28.07.2012
//$split[0] = Hello
//$split[1] = 2%
//$split[2] = 15.06.16
//$split[3] = Ten
//$date = 15.06.16
答案 2 :(得分:0)
我喜欢aurel.g的答案,并为了我自己的目的扩展了一些。特别是,我想处理Excel不断转换我的好约会的两位数年份。如果日期是下铺(例如6/32/2014),我还使用strtotime()返回FALSE。我认为这可能会有所帮助(我没有找到一种方法将其作为上述评论发布,抱歉):
$result = preg_match("/^(.*)(\d{1,2}\/\d{1,2}\/\d{2,4})(.*)/",$date, $matches);
// use strtotime() to test if that's a valid date:
if ($result && strtotime($matches[2]) {
// convert it back to the date in the desired format:
return date('m/d/Y',strtotime($matches[2]));
}