获取8个整数的所有序列的代码工作正常:
preg_match_all('/[0-9]{8}/', $string, $match);
但是我只对比赛从20开始感兴趣。
我知道我必须在某处添加^20
,但我已多次尝试但没有成功。我已经查看了许多正则表达式教程,但似乎没有解释如何进行2次单独搜索。
我实际上是在尝试解析ICAL文件以提取日期。如果8位整数以20开头,那几乎肯定是一个日期。
例如:DTSTART:20150112T120000Z
答案 0 :(得分:0)
这个解决方案怎么样:
/(20)\d{6}/
答案 1 :(得分:0)
这可能会找到你要找的东西:
(?=20)(\d{8})
如果一个组以20
和一个8位数字开头,它会捕获一个正面的预测。
答案 2 :(得分:0)
答案很大程度上取决于你想要达到的目标。是否要从icalendar文件中提取所有日期和任何日期。如果是这样,您可能会错过生日日期,因为他们的年份最有可能以19xx开头。
同时匹配任何日期都会产生很多不受欢迎的日期,例如UNTIL
,TRIGGER
,DTEND
,......
假设您的示例要提取事件开始日期,您可以尝试:
DTSTART[a-zA-Z._%+-/=;]*:(\d){8}[T]?[\d]{6}
要记住:关注DTSTART
可以是时区定义,例如TZID=America/New_York
和/或类型定义DATE
或DATE-TIME
(请参阅RFC5545 DATE-TIME