反向正则表达式匹配

inverse regex match

我要过滤的数据类似于以下列表。

/sites/site1/archive/folder/
/sites/site1/archive/other/
/sites/site2/archive/folder/
/sites/site2/archive/other/
/sites/site3/other/folder/
/sites/site3/other/
/sites/site3/other/folder/location/

为了匹配我希望保留的行,我可以成功使用 /.+sites\/.+\/archive\/folder.+/ig (https://regex101.com/r/psxQum/2)。这与第 1 行和第 3 行匹配。

但是要反转选择,例如匹配与我的路径不匹配的行,最接近的(到目前为止)我能想到的是/.+sites\/.+\/archive\/(?!folder).+/ig (https://regex101.com/r/psxQum/3) 匹配第 2 行和第 4 行,但不匹配第 5 行。

编辑1:
我知道我正在搜索 archive 的字面匹配项,但是当扩展否定 lookhead 以包含存档文件夹 /.+sites\/.+\/(?!archive\/folder).+/ig 时,它无法匹配任何内容。

编辑2:
包括另外两个要列出的示例模式。

https://regex101.com/r/1zv3Hl/1

.+sites\/.+\/(?!archive\/folder.+).+\/.+\/

它使用否定前瞻来确保前面没有 archive/folder,然后匹配“任何斜线任何斜线”。因为排除了你不想要的那两行,所以只匹配剩下的。

编辑:从“0 个或多个”量词更改为“1 个或多个”量词以匹配您建立的模式。

根据评论进行第二次编辑:

这是一种完全不同的方法,您可以匹配任何字符串,只要在行的开头和结尾之间没有 archive/folder 的实例。如果该模式不存在,该行将匹配。

^(?:(?!archive\/folder).)*$

https://regex101.com/r/BN82ce/1