我喜欢通过使用grep获取一个程序调用khal输出的日历条目的约会描述。 khal的输出是这样的:如何在正则表达式中描述可选的负向预测?
20:30-22:30 13.05.2015: Manfred treffen Repeat: FREQ=WEEKLY;BYDAY=WE;WKST=MO
09.05. - 12.05.2015: Britt Besuch
在我想匹配Manfred treffen
和Britt Besuch
的例子。但是,正如您所看到的,第一个约会是重复约会,而khal则将这些信息添加到输出中。在这种情况下,正则表达式必须确保从Repeat:
开始的每个整个部分都将被省略,但当然只有当它存在时才会被忽略。
grep -oP "(?<=:)(.)+(?=Repeat: .+$)"
让我 Manfred treffen
但不Britt Besuch
然而grep -oP "(?<=:)(.)+(?=Repeat: .+$|$)"
给了我两个约会,但第一个与整个的说明“重复:” ......包括一部分。
我似乎需要的是一个可选的lookahead。我在stackoverflow上发现了一个类似的问题,但并没有真正理解这个方法(贪婪的匹配),也不可能为我的情况采用它。
你并不需要去捕获组。 –
这将匹配'Britt Besuch这是'09.05内的一个句子'。 - 12.05.2015:布里特Besuch这是一个句子' – Kasramvd
奇怪,在演示它的作品。在我的计算机上,但是我仍然得到所有“重复:”信息字符串,直到结尾 –