You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用preg_match_all匹配包含英文/德文月份的日期格式?

问题:提取英文/德文月份格式的日期

我有一段用于从字符串中提取日期的preg_match_all代码:

preg_match_all('/\d{1,2}\.\d{1,2}\.\d{2,4}/',$myString,$dates);

这段代码可匹配如下格式的日期:

01.01.2022
1.01.2022
1.1.2022
1.1.22
...

现在我需要匹配如下格式的日期:

25 März 2023
or
25 March 2023

请问该如何实现?


解决方案

基础实现:匹配月份全称

直接构建包含所有需要的英文、德文月份全称的正则表达式,结合日期和四位年份即可:

preg_match_all('/\d{1,2} (Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember|January|February|March|April|May|June|July|August|September|October|November|December) \d{4}/', $myString, $dates);

各部分说明

  • \d{1,2}:匹配1-2位的日期数字(如25或5)
  • 括号内的列表:用|分隔所有需要匹配的德文、英文月份全称,表示“或”的逻辑
  • \d{4}:匹配四位完整年份(如2023)

扩展:支持月份缩写

如果需要同时匹配月份缩写(比如Mar、Mär),可以把缩写补充进正则:

preg_match_all('/\d{1,2} (Januar|Jan|Februar|Feb|März|Mär|April|Apr|Mai|May|Juni|Jun|Juli|Jul|August|Aug|September|Sep|Oktober|Okt|November|Nov|Dezember|Dez|January|February|March|Apr|May|June|July|August|September|October|November|December) \d{4}/', $myString, $dates);

灵活调整项

  • 如果目标字符串中日期和月份、月份和年份之间可能存在多个空格,把正则中的单个空格替换为\s+(匹配一个或多个空白字符)
  • 如果需要兼容两位年份(如23),将\d{4}修改为\d{2,4}

内容的提问来源于stack exchange,提问作者Trombone0904

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:12:03