反向正则表达式匹配
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).)*$
我要过滤的数据类似于以下列表。
/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).)*$