如何使用PHP替换字符串以更改iCal文件中的事件时间?

如何使用PHP替换字符串以更改iCal文件中的事件时间?,php,regex,icalendar,Php,Regex,Icalendar,我有一个ics文件,里面有很多行。其中一些行包含如下字符串: DTSTART;VALUE=DATE:20180201 DTSTART;TZID=Europe/Berlin:20180201T080000 现在我想替换所有这些行,如下所示: DTSTART;VALUE=DATE:20180201 DTSTART;TZID=Europe/Berlin:20180201T080000 我曾尝试使用一些在线正则表达式生成器来实现它,但问题是我太笨了,无法理解它们。任何帮助都会很好 假设你只想

我有一个ics文件,里面有很多行。其中一些行包含如下字符串:

DTSTART;VALUE=DATE:20180201
DTSTART;TZID=Europe/Berlin:20180201T080000
现在我想替换所有这些行,如下所示:

DTSTART;VALUE=DATE:20180201
DTSTART;TZID=Europe/Berlin:20180201T080000

我曾尝试使用一些在线正则表达式生成器来实现它,但问题是我太笨了,无法理解它们。任何帮助都会很好

假设你只想改变时间来反映欧洲/柏林

您可以在regex
/(?!DTSTART;)VALUE=DATE(?=:\d)/
中使用负前瞻和正前瞻来定位字符串的“DATE”组件。然后简单地将其替换为
TZID=Europe/Berlin
,然后将时区附加到末尾:

$input = 'DTSTART;VALUE=DATE:20180201';
$string = preg_replace("/(?!DTSTART;)VALUE=DATE(?=:\d)/", "TZID=Europe/Berlin", $input);
$string .= 'T080000';
这将为您提供一个名为
$string
的变量,其值为
DTSTART;TZID=Europe/Berlin:20180201T080000
,可以看到它正在工作


希望这有帮助

所以你只想更换
欧洲/柏林
?如果要处理任何其他城市,如何知道输出要包括哪个城市?正则表达式似乎不是这个工作的合适工具……你的意思是像S.Kablar那样真正做到了这一点。非常感谢你!