Php 以“格式”从字符串中提取日期;DD-MMM-YYYY“;

Php 以“格式”从字符串中提取日期;DD-MMM-YYYY“;,php,regex,string,date,Php,Regex,String,Date,我试图从字符串变量中提取日期,希望得到一些帮助 $editdate = "Content last modified on 17 May 2011 at 23:13"; 从这个字符串中,我试图提取2011年5月17日,请记住日期会有所不同,代码需要能够提取此格式的任何日期,DD-MMM-yyy 我曾想过使用preg_match来实现这一点,但我无法找到一个合适的正则表达式模式来正确提取日期 这可以用正则表达式实现吗?或者我应该使用不同的函数吗 谢谢你的帮助 试试看: $timestamp =

我试图从字符串变量中提取日期,希望得到一些帮助

$editdate = "Content last modified on 17 May 2011 at 23:13";
从这个字符串中,我试图提取2011年5月17日,请记住日期会有所不同,代码需要能够提取此格式的任何日期,DD-MMM-yyy

我曾想过使用preg_match来实现这一点,但我无法找到一个合适的正则表达式模式来正确提取日期

这可以用正则表达式实现吗?或者我应该使用不同的函数吗

谢谢你的帮助

试试看:

$timestamp = strtotime( str_replace( array("Content last modified ", "at"), "", $editdate ) );

这将给您留下一个历元时间戳,您可以使用
date()

任意方式输出它,假定字符串的文本内容始终相同,并且它总是以时间结束

$editdate = substr($editdate, 25, -9); // 17 May 2011

但是,如果日期格式发生变化,这是非常不灵活的。

这在正则表达式中是可能的。给定DD-MMM-YYYY格式,您需要一个正则表达式来匹配两位(或一位?)数字,然后是一个空格、三个字母、一个空格和四位数字

这看起来像:

$regex = '/(\d{2} [a-z]{3} \d{4})/i';

这可以进一步优化。

这可能就是实现此目的的模式:

([0-9]){1}([0-9]){0,1}(\s.*\s)([0-9]){4}
搜索一个数字,然后可能会有另一个数字,后面是空格和字符,一个空格和4个数字表示年份。

尝试以下“取消:

preg_match('/(\d?\d [A-Za-z]+ \d\d\d\d) at (\d\d\:\d\d)/', $editdate, $matches);

print_r($matches); 
$date = $matches[1];
$time = $matches[2];

我认为这在所有情况下都会起作用(尽管这很难看)

如果字符串格式总是以上次修改的
内容开始,则正则表达式可能会过死。是这样吗?@jason是的,字符串将始终包含日期之前最后一次修改的内容。我想我可以试着用内爆来做这个?stevecomrie有你的答案@sdleihssirhc,什么?@Jason-“像个老板”是件好事:-)+1如果你的前提是真的,这是更好的执行方式。如果日期的格式没有前导零,这将失败。假设2011年11月1日不匹配。正确,
\d{2}
需要替换为
\d{1,2}
,如果您也想匹配个位数的天数。我想这将是最灵活的:)+1我想这是一个极好的答案:)开箱即用的答案!:)@usr122212:我不得不进行编辑,因为strotime不喜欢原始日期中的“at”。看看我的更新代码。嗯,这很奇怪。。使用
$timestamp=date('jm.Y',strotime(str_replace(“上次修改的内容,”,$editdate))它返回1969年12月31日的lol,这不可能是正确的