0

获取所有 8 个整数序列的代码可以正常工作:

preg_match_all('/[0-9]{8}/', $string, $match);

但是,我只对比赛以 20 开始感兴趣。

我知道我必须在 ^20某个地方添加,但我尝试了很多次都没有成功。我看过许多正则表达式教程,但似乎都没有解释如何进行 2 次单独搜索。

我实际上是在尝试解析 ICAL 文件以提取日期。如果 8 位整数以 20 开头,则几乎可以肯定它是一个日期。

例如:DTSTART:20150112T120000Z

4

3 回答 3

0

这可能会找到您要查找的内容:

(?=20)(\d{8})

20如果组以 8 位数字开头,则它会进行积极的前瞻来捕获组。

于 2015-02-06T12:42:51.537 回答
0

答案在很大程度上取决于您想要实现的目标。您想从 icalendar 文件中提取所有日期吗?如果是这样,您可能会错过生日日期,因为他们的年份最有可能从 19xx 开始。

匹配任何日期也很可能会产生许多不需要的日期,如UNTIL, TRIGGER, DTEND, ...

假设从您的示例中您想要提取事件开始日期,您可以尝试:

DTSTART[a-zA-Z._%+-/=;]*:(\d){8}[T]?[\d]{6}

请记住:以下DTSTART可以是时区定义,例如TZID=America/New_York和/或类型定义DATEDATE-TIME(参见RFC5545 DATE-TIME

于 2015-02-14T08:51:54.037 回答
0

这个解决方案怎么样:

/(20)\d{6}/
于 2015-02-06T12:39:08.680 回答