正则表达式:匹配缺少 word1 的行,但它们包含 word2

Regex: match lines missing word1 except they include word2

我正在寻找与某些 URL 匹配的正则表达式:

我想匹配任何 URL,除非它们包含单词 "Koeln" 或包含单词 "Karneval"(无论它们是否包含 Koeln)。

例子:

1) http://www.news.com/Report-Deutschland/Panorama/Deutschland/story.html

2) http://www.news.com/Koeln/Karneval/story.html

3) http://www.news.com/Koeln/Koelnaktuell/story.html

1) 和 2) 应该匹配。 1) 因为它不包括 "Koeln" 和 2) 因为它包括 "Karneval" 3) 不应匹配,因为它包含 "Koeln" 但不包含 "Karneval"

我使用 positive/negative 前瞻性尝试了许多不同的正则表达式,但到目前为止 none 它们都有效。

我计划在 PHP 中使用 preg 实现正则表达式。

不确定这是否是最佳方法,但您可以尝试一下,看看它是否适合您:

(http://.*?/Karneval.*$|http://www\.news\.com(?!/Koeln).*$)

我基本上只是在做两个表达式……一个匹配 Karneval,一个在 www.news.com.

之后找不到 /Koeln

这是您可以尝试的演示: Regex101 Demo

希望这对您有用,或者至少为您指明了正确的方向。