我正在构建一个本地事件日历,它采用RSS提要和网站抓取并从中提取事件日期.

我之前已经问过如何从PHP here中的文本中提取日期,并在MarcDefiant时获得了一个很好的答案:

function parse_date_tokens($tokens) {

# only try to extract a date if we have 2 or more tokens

if(!is_array($tokens) || count($tokens) < 2) return false;

return strtotime(implode(" ", $tokens));

}

function extract_dates($text) {

static $patterns = Array(

'/^[0-9]+(st|nd|rd|th|)?$/i', # day

'/^(Jan(uary)?|Feb(ruary)?|Mar(ch)?|etc)$/i', # month

'/^20[0-9]{2}$/', # year

'/^of$/' #words

);

# defines which of the above patterns aren't actually part of a date

static $drop_patterns = Array(

false,

false,

false,

true

);

$tokens = Array();

$result = Array();

$text = str_word_count($text, 1, '0123456789'); # get all words in text

# iterate words and search for matching patterns

foreach($text as $word) {

$found = false;

foreach($patterns as $key => $pattern) {

if(preg_match($pattern, $word)) {

if(!$drop_patterns[$key]) {

$tokens[] = $word;

}

$found = true;

break;

}

}

if(!$found) {

$result[] = parse_date_tokens($tokens);

$tokens = Array();

}

}

$result[] = parse_date_tokens($tokens);

return array_filter($result);

}

# test

$texts = Array(

"The focus of the seminar, on Saturday 2nd February 2013 will be [...]",

"Valentines Special @ The Radisson, Feb 14th",

"On Friday the 15th of February, a special Hollywood themed [...]",

"Symposium on Childhood Play on Friday, February 8th",

"Hosting a craft workshop March 9th - 11th in the old [...]"

);

$dates = extract_dates(implode(" ", $texts));

echo "Dates: \n";

foreach($dates as $date) {

echo " " . date('d.m.Y H:i:s', $date) . "\n";

}

但是,该解决方案有一些缺点 – 首先,它无法匹配日期范围.

我现在正在寻找一种更复杂的解决方案,可以从示例文本中提取日期,时间和日期范围.

这是最好的方法吗?看起来我正在靠回一系列正则表达式语句,一个接一个地运行以捕获这些情况.我无法看到更好的方法来捕捉日期范围,但我知道必须有更好的方法来做到这一点.是否有任何库只用于PHP中的日期解析?

根据要求,日期/日期范围样本

$dates = [

" Saturday 28th December",

"2013/2014",

"Friday 10th of January",

"Thursday 19th December",

" on Sunday the 15th December at 1 p.m",

"On Saturday December 14th ",

"On Saturday December 21st at 7.30pm",

"Saturday, March 21st, 9.30 a.m.",

"Jan-April 2014",

"January 21st - Jan 24th 2014",

"Dec 30th - Jan 3rd, 2014",

"February 14th-16th, 2014",

"Mon 14 - Wed 16 April, 12 - 2pm",

"Sun 13 April, 8pm",

"Mon 21 - Wed 23 April",

"Friday 25 April, 10 – 3pm",

"The focus of the seminar, on Saturday 2nd February 2013 will be [...]",

"Valentines Special @ The Radisson, Feb 14th",

"On Friday the 15th of February, a special Hollywood themed [...]",

"Symposium on Childhood Play on Friday, February 8th",

"Hosting a craft workshop March 9th - 11th in the old [...]"

];

我目前正在使用的功能(不是上述功能)大约90%准确.它可以捕获日期范围,但如果还指定了时间则有困难.它使用正则表达式列表,非常复杂.

更新:2014年1月6日

我正在研究执行此操作的代码,使用一系列正则表达式的原始方法依次运行.我认为我接近一个可以从一段文本中提取几乎任何日期/时间范围/格式的工作解决方案.当我完成后,我会在这里发布它作为答案.

php 日期时间 取日期,从PHP中的文本中提取日期,时间和日期范围相关推荐

  1. 用函数在Excel中从文本字符串提取数字

    Excel输入数据过程中,经常出现在单元格中输入这样的字符串:GH0012JI.ACVB908.华升12-58JK.五香12.56元.0001#.010258等.在进行数据处理时,又需要把其中的数字0 ...

  2. Matlab中图文本中的希腊字母和特殊字符

    目录 包含希腊字母 包含上标和注释 TeX 标记选项 图文本中的希腊字母和特殊字符是可以使用 TeX 标记向图中添加包含希腊字母和特殊字符的文本.此外,还可以使用 TeX 标记添加上标.下标以及修改文 ...

  3. oracle中制表符,oracle中去掉文本中的换行符、回车符、制表符

    一.特殊符号ascii定义 制表符 chr(9) 换行符 chr(10) 回车符 chr(13) UPDATE tc_car_order set USE_REASON =  REPLACE('USE_ ...

  4. python matplotlib x轴日期显示问题。matplotlib 坐标轴设置文本间隔,matplotlib 坐标轴过于密集、无法实现其他功能。

    笔者想要达成的目的:分区作图.日期坐标轴 笔者遇到的问题: 1.日期坐标轴变成一个大黑条: 2.按照其他帖子设置后,要么调整不成功,要么调整成功了但是其他的调整(包括画面尺寸)失效,要么同时产生了一堆 ...

  5. css可以设置文本框颜色吗,如何在css中设置文本框颜色

    如何在css中设置文本框颜色 发布时间:2021-04-29 15:33:54 来源:亿速云 阅读:72 作者:Leah 如何在css中设置文本框颜色?针对这个问题,这篇文章详细介绍了相对应的分析和解 ...

  6. 论文阅读:A Survey of Textual Event Extraction from Social Networks 综述:从社交媒体中抽取文本事件

    A Survey of Textual Event Extraction from Social Networks 综述:从社交媒体中抽取文本事件 目录 A Survey of Textual Eve ...

  7. vue 图片宫格_vue 如何拿到后台传回的富文本中的img,进行9宫格排列展示以及相关处理...

    描述: res.data.list 返回的数组, 数组中的每个对象有一个 content,就是传回来的富文本的内容,要拿到这里面的所有的img,进行9宫格排列处理: 1.let img = this. ...

  8. matlab产生时间数组以月为单位_Matlab中处理日期与时间的函数

    Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646,而这同一天的中午12点就被表示 ...

  9. python中datetime函数怎么获得当年年份_Python 日期和时间函数使用指南

    在本教程中,我们将介绍 python 的 datetime 模块以及如何使用它来处理日期.时间,以及日期时间的格式化处理. 它包含各种实用示例,可帮助您通过 python 函数更加快捷高效进行日期和时 ...

最新文章

  1. 数据结构与算法(6-2)二叉树的存储结构(顺序存储、链式存储)
  2. MarkdownView:Markdown 文档预览视图组件
  3. ruby中取反的问题
  4. python的random函数_关于random()的详细介绍
  5. 三大数据驱动机制,助力文娱企业打造高留存、高转化增长闭环
  6. dnf剑魂buff等级上限_DNF:传说BUFF换装副本周一更新次数,胜-深渊之麟掉价至1600W...
  7. 2020 前端开源领域技术展望
  8. Error和Exception有什么区别?(还在总结)
  9. ACM:回溯,八皇后问题,素数环
  10. html中日期格式化函数,JavaScript日期时间格式化函数分享
  11. linux的目录创建时间,LINUX下文件创建时间问题
  12. 我是一个*** (十三)
  13. 未安装任何音频设备解决方案(2021/12/27)
  14. MATLAB:gca、gcf、gco区别
  15. linux设置北京时间
  16. Mysql workbench画ER图
  17. SQL Server获取当年第一天当年最后一天当月第一天当月最后一天
  18. 各种后缀名--使用什么软件打开
  19. 【Docker】如何修改Docker的镜像源?
  20. SSL/TLS高强度加密

热门文章

  1. 前端学习(2183):tabber--基本架构的构建
  2. 前端学习(1737):前端调试值测试窗口的切换
  3. 前端学习(1422):ajax获取服务器端的响应
  4. 前端学习(684):循环导读
  5. 第六十七期:Python爬虫44万条数据揭秘:如何成为网易音乐评论区的网红段子手
  6. 关于春招 秋招面试的一些经验
  7. 工业机器人工具中心点标定的意义_如何理解工业机器人的工具中心点
  8. python数字转日期函数_【转】Python 日期和时间
  9. vld检测不输出_专业分享丨高频电刀的质量控制检测
  10. Python代写CSSE1001/7030 python程序作业、代做python CSSE1001/7030程序作业、 代写CSSE1001/7030 python 作业...