Regex 正则表达式来匹配不在特定目录中的所有路径

Regex 正则表达式来匹配不在特定目录中的所有路径,regex,regex-negation,Regex,Regex Negation,目标:我想匹配所有不在elasticmapreduce/j-abc123/node/I-abc123/applications目录中的路径 以下是一组可能的路径: elasticmapreduce/j-abc123/node/i-abc123/applications/hadoop-yarn/hadoop-yarn-proxyserver-ip.log.2020-05-07-00.gz elasticmapreduce/j-abc123/node/i-abc123/applications/ha

目标:我想匹配所有不在
elasticmapreduce/j-abc123/node/I-abc123/applications
目录中的路径

以下是一组可能的路径:

elasticmapreduce/j-abc123/node/i-abc123/applications/hadoop-yarn/hadoop-yarn-proxyserver-ip.log.2020-05-07-00.gz
elasticmapreduce/j-abc123/node/i-abc123/applications/hadoop-yarn/hadoop-yarn-timelineserver-ip.out.gz
elasticmapreduce/j-abc123/node/i-abc123/applications/hadoop-yarn/hadoop-yarn-proxyserver-ip.log.gz
elasticmapreduce/j-abc123/node/i-abc123/applications/hive/user/hive/hive.log.2020-05-07.gz
elasticmapreduce/j-abc123/node/i-abc123/applications
elasticmapreduce/j-abc123/node/i-abc123/bootstrap-actions/master.log.2020-05-07-00.gz
elasticmapreduce/j-abc123/node/i-abc123/bootstrap-actions
elasticmapreduce/j-abc123/node/i-abc123/daemons/instance-state/instance-state.log-2020-05-08-13-30.gz
elasticmapreduce/j-abc123/node/i-abc123/daemons/setup-dns.log.gz
elasticmapreduce/j-abc123/node/i-abc123/provision-node/abc123/stderr.gz
elasticmapreduce/j-abc123/node/i-abc123/provision-node/apps-phase/0/abc123/stderr.gz
elasticmapreduce/j-abc123/node/i-abc123/provision-node/reports/0/abc123/ip.ec2.internal/201805270306.yaml.gz
elasticmapreduce/j-abc123/node/i-abc123/setup-devices/setup_var_log_dir.log.gz
以下正则表达式匹配包含
elasticmapreduce/j-abc123/node/i-abc123/applications
的所有路径:

^elasticmapreduce\/j-.*\/node\/i-.*\/(applications(\/.*)*)$
我想匹配上面正则表达式模式未匹配的所有路径

为什么下面的正则表达式不这样做?

^elasticmapreduce\/j-.*\/node\/i-.*\/(?!(applications(\/.*)*))$

PS,我用来测试正则表达式模式。

您尝试的模式没有按预期工作,因为它将匹配到最后一次出现的
/
,然后必须完成此部分
(?!(应用程序(\/.*)$

该部分断言直接右侧的不是
应用程序
,后面是0次或多次重复的
/
,后面是任何字符。然后断言字符串的结尾

它开始回溯,在任何示例中都无法匹配

我认为省略
$
并查看匹配的结束位置会更好地显示:


由于您不匹配在
j-
i-
之后包含正斜杠的部分,因此可以使用否定字符类来代替
[^\/]+
匹配除正斜杠以外的任何字符

^elasticmapreduce\/j-[^\/]+\/node\/i-[^\/]+\/(?!applications\b)[^\/]*(?:\/.*)?$
然后在匹配正斜杠后立即使用负前瞻
\/(?!applications\b)

^elasticmapreduce\/j-[^\/]+\/node\/i-[^\/]+\/(?!applications\b)[^\/]*(?:\/.*)?$


注意如果您不想跨越换行符,可以使用
[^\/\r\n]+

您的意思是这样吗<代码>^elasticmapreduce\/j-[^\/]+\/node\/i-[^\/]+\/(?!应用程序)[^\/]*(?:\/.*)$