【问题标题】:Extract an 8 character integer string from an ical file从 ical 文件中提取 8 个字符的整数字符串
【发布时间】:2015-02-06 12:31:43
【问题描述】:

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

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

不过,我只对比赛以 20 开头感兴趣。

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

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

例如:DTSTART:20150112T120000Z

【问题讨论】:

  • 你试过(?=20)(\d{8})吗?

标签: php icalendar rfc5545


【解决方案1】:

这个解决方案怎么样:

/(20)\d{6}/

【讨论】:

  • 我会使用 /(20\d{6})/ 来获得整场比赛,而不是仅获得 20 场比赛。
【解决方案2】:

这可能会找到你要找的东西:

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

如果组以20 和一个 8 位数字开头,则它会进行正向前瞻来捕获组。

【讨论】:

    【解决方案3】:

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

    同时匹配任何日期很可能会产生许多不需要的日期,例如UNTILTRIGGERDTEND、...

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

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

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

    【讨论】:

    • 感谢您的回答。前 2 个答案非常适合我的需求,因为我只对未来感兴趣。这是我制作的函数 function extract_numbers($string) { preg_match_all('/(201\d{5})/', $string, $match); //找到一个以201开头后跟5个整数的数字 return $match[0]; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2020-07-20
    • 2011-09-10
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多