Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从ical文件中提取8个字符的整数字符串_Php_Icalendar_Rfc5545 - Fatal编程技术网

Php 从ical文件中提取8个字符的整数字符串

Php 从ical文件中提取8个字符的整数字符串,php,icalendar,rfc5545,Php,Icalendar,Rfc5545,这段代码可以获得8个整数的所有序列: preg_match_all('/[0-9]{8}/',$string,$match) 然而,我只感兴趣,如果比赛以20开始 我知道我必须在某处添加^20,但我已经尝试了很多次,但都没有成功。我看过很多正则表达式教程,但似乎没有一本解释如何进行两次单独的搜索 我实际上是在试图解析ICAL文件来提取日期。如果8位整数以20开头,几乎可以肯定它是一个日期 例如:DTSTART:20150112T120000Z这个解决方案怎么样: /(20)\d{6}/ 这可能

这段代码可以获得8个整数的所有序列:

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

然而,我只感兴趣,如果比赛以20开始

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

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


例如:
DTSTART:20150112T120000Z

这个解决方案怎么样:

/(20)\d{6}/

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

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

如果一个组以
20
和一个8位数字开头,那么它会对捕获该组进行正向预测。

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

此外,匹配任何日期都很可能会产生许多不希望出现的日期,如
直到
触发器
数据结束

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

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

请记住:
DTSTART
后面可以是时区定义,如
TZID=America/NewYork
和/或类型定义
DATE
DATE-TIME
(请参见您是否尝试过
(?=20)(\d{8})
?我会使用/(20\d{6})/以获得整个匹配,而不是仅20个。感谢您提供的答案。前两个答案非常适合我的需要,因为我只对未来感兴趣。这是我制作的函数extract_numbers($string){preg_match_all('/(201\d{5})/,$string,$match);//查找一个以201开头,后跟5个整数的数字,返回$match[0];}