【发布时间】:2015-12-11 12:34:42
【问题描述】:
我想匹配 2015 年 13 月 12 日(日、月、年分开)的:
ASTA n° 30 | 13/12/2015 ore 10.00 | Arte Moderna & Contemporanea
使用这个正则表达式(PHP - preg_match):
/(\d{1,2})\D{1,4}(\d{1,2})\D{1,4}(\d{4}|\d{2})/imu
我明白了:
30 | 13/12
但我需要 2015 年 12 月 13 日。 似乎正则表达式不够贪婪......我知道我的正则表达式可以匹配我得到的匹配,但我更喜欢 \d{4} 而不是 \d{2} (在最后一个圆括号中)。
编辑:我需要 \d{2} 和 \D{1,4} 部分更灵活(有像 13.10.15 或 13th 12.2015 等日期)。 有没有办法反转正则表达式引擎的处理顺序(端到端)?所以它会先匹配 \d{4} 然后匹配 \d{2} (月和日)?
【问题讨论】:
-
一般的方法是使用正则表达式提取日期,不检查日期是否有效,然后使用适当的方法验证它,它更可靠,尤其是正则表达式不会检查许多方面,如 29.02 : P
-
是的,我知道 ;) 我检查了 40 种不同的语言和 30 种不同的放置模式(如 2015 年 20 月 10 日、2015 年 12 月 2 日、2015 年 9 月 2 日 3 日和 4 日等)我的规则尝试提取一个日期,然后使用解析 DateTime 类进行验证...
标签: php regex date parsing greedy