这个问题的简短版本是:“如果多行字符串中的所有行都不包含任何关键字,我该如何删除它们?”
我正在用php和js制作一个应用程序,真的不想使用许多外部库来膨胀我的代码和文件结构,而且我也不是类和方法的超级粉丝(可能是我有点强迫症)。
这段代码没有使用google API,而是使用ics文件,因为我想让它更通用
长话短说,我正在解析一个ics文件来比较客户可能预定会议的日期/时间和谷歌日历的ics文件,目标是我只提供与我的日程不冲突的会议时间,到目前为止运行良好,我做了一个很好的javascript解析器来获取开始和结束时间。
这个问题是我发送我的整个日历的源代码中的客户端,这是10年的事件,使源代码像15 k行。我也不是疯狂的陌生人有机会与我的时间表和私人信息,那么多的细节。我想一个PHP脚本,以消除行不'Don“不要从DTSTART或DTEND开始,但当我看到一个pregreplace时,我会感到困惑,我很难理解它。
如果一个ics以“DTSTART”或“DTEND”开头,那么保留它的整行并删除其他所有内容的优先级是什么?
可能我还需要添加一些其他的行来防止我的javascript ics解析器也被破坏,但是我真的很想解决隐私问题,在一个完美的世界里,我也会在解析时删除已经结束的事件,因为它们不会与未来的事件冲突。
这是ics文件中的一段文字,我编辑了一些琐碎的私人信息以防万一
BEGIN:VEVENT
DTSTART:20200907T170000Z
DTEND:20200907T180000Z
DTSTAMP:20221231T224008Z
UID:(redacted)
CREATED:20200820T161956Z
DESCRIPTION:
LAST-MODIFIED:20200820T162009Z
LOCATION:
SEQUENCE:1
STATUS:CONFIRMED
SUMMARY:Contact (redacted name here)
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20201101
DTEND;VALUE=DATE:20201104
DTSTAMP:20221231T224008Z
UID:(redacted)
CREATED:20200818T153428Z
DESCRIPTION:
LAST-MODIFIED:20200818T153428Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:..REDACTED PRIVATE INFO
TRANSP:TRANSPARENT
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:This is an event reminder
TRIGGER:-P0DT4H0M0S
END:VALARM
END:VEVENT
BEGIN:VEVENT
在这个块中,我只想保留这样的行(或者最好是DTEND:2023及以上的行):
BEGIN:VEVENT
DTSTART:20200907T170000Z
DTEND:20200907T180000Z
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20201101
DTEND;VALUE=DATE:20201104
END:VEVENT
BEGIN:VEVENT...
1条答案
按热度按时间xzabzqsa1#
这是我找到的解决方案,到目前为止,首先你分解EOL上的每一行文本,然后这个preg_match加上一个数组过滤器找到我开始的列表中的任何字符串,只有开始和结束时间。我想这将工作我正在做的。