查找所有出现的'可以解释为时间'

时间:2010-09-19 16:28:42

标签: php regex parsing time

是否有一种有效的方法来搜索可能代表时间的子串?

例如,此消息:

  让我们明天14:30见面,或者你喜欢下午2:30?

应该返回('14:30', '2:30pm')。使用简单的正则表达式可以很容易地找到hh:mm次数,但我想知道是否有现有的解决方案可以找到比简单案例更多的内容。

1 个答案:

答案 0 :(得分:2)

这是我提出的正则表达式:

^((\d{1,2}:\d{2}\s?([ap]m?)?)|(\d{1,2}\s?[ap]m?))$

匹配:

2:10
14:20
10:00am
3:49p
4pm
10a 

但不是:

12
22:342
14:0
20rpm

rubular

我认为它比这更聪明太难了。例如,“我明天2后有两个班级”你不能指望一个程序能够正确识别哪些数字可以被解释为时间,除非它能够理解语义 - 但这是一个完全不同的故事

PS:正则表达式也匹配字符串,比如99:99 am,可以修复,但会使正则表达式更加混乱,只是不值得修复IMO。