【发布时间】:2013-01-13 03:00:06
【问题描述】:
我正在开发一个应用程序,它会抓取本地网站以创建即将发生的事件的数据库,并且我正在尝试使用正则表达式来捕获尽可能多的日期格式。
考虑以下句子片段:
- “2013 年 2 月 2 日星期六研讨会的重点将是 [...]”
- “2 月 14 日丽笙酒店的情人节特辑”
- “2 月 15 日星期五,一个特别的好莱坞主题 [...]”
- “2 月 8 日星期五儿童游戏研讨会”
- “3 月 9 日至 11 日在旧 [...] 举办工艺研讨会”
我希望能够扫描这些并捕获尽可能多的日期。目前我正在以一种可能有缺陷的方式执行此操作(我不擅长正则表达式),一个接一个地通过几个正则表达式语句,就像这样
/([0-9]+?)(st|nd|rd|th) (of)? (Jan|Feb|Mar|etc)/i
/([0-9]+?)(st|nd|rd|th) (of)? (January|February|March|Etcetera)/i
/(Jan|Feb|Mar|etc) ([0-9]+?)(st|nd|rd|th)/i
/(January|February|March|Etcetera) ([0-9]+?)(st|nd|rd|th)/i
我可以将所有这些合并到一个巨大的正则表达式语句中,但似乎在 php 中必须有一种更清洁的方式来执行此操作,也许是第三方库或其他什么?
编辑:上面的正则表达式可能有错误 - 它只是作为一个例子。
【问题讨论】:
-
到底是什么问题?您是否正在寻找一个与您已有的四个等价的正则表达式?是否有某些原因您不能使用多个?
-
这些函数可能有用DateTime::createFromFormat, date_parse, strftime, strtotime
-
@erisco,我想知道 A) 所需的四个以上表达式是否可以巧妙地合并到一个表达式中,或者 B) 是否有一个库或函数可以做到这一点,就像下面建议的那样跨度>