如何使用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
相关产品推荐
相关产品推荐

