正则表达式匹配 URL 的所有子文件夹,除了一些特殊的

regex to match all subfolders of a URL, except a few special ones

好的,我正在编写一个正则表达式,我想匹配特定的 url 路径,以及它下面的所有子文件夹,但有一些被排除在外。对于上下文,这是在 verizon edgecast 内部使用,这是一个 CDN 缓存系统。它支持正则表达式,但不幸的是我不知道它支持的正则表达式 'flavor' 并且文档对此也不清楚。似乎支持所有核心正则表达式功能,而这应该是我所需要的。不幸的是,阅读文档需要一个帐户,但您可以在这里了解 edgecast 的一般概念:https://www.verizondigitalmedia.com/platform/edgecast-cdn/

所以,这里有一些示例数据:

help
help/good
help/better
help/great
help/bad
help/bad/worse

这是我现在使用的正则表达式:

(^help$|help\/[^bad].*)

link: https://regex101.com/r/CBWUDE/1

细分:

( - start capture group
^ - start of string
help - 1st thing that should match
$ - end of string
| - or
help - another thing that should match
\/ - escaped / so i can match help/
[^bad] - match any single character that isn't b, a, or d
. - any character 
* - any number of times
) - end capture group

我希望匹配前4个,但不匹配后2个,'bad'或'bad/worse'不应该匹配,help/anythingelse应该匹配

这个正则表达式对我有用,除了 help/better 不匹配。它不匹配的原因,我很确定,是因为更好,包含出现在 'bad' 中的字符。如果我将 'bettter' 更改为 'getter' 那么它就变成了匹配项,因为它不再包含 b。

所以我真正想要的是 'bad' 只匹配整个单词 bad,而不匹配其中包含 b、a 或 d 的任何内容。我尝试使用单词边界来执行此操作,但没有给我所需的结果,但也许我只是语法错误,这是我尝试过的:

(^help$|help\/[^\bbad\b].*)

但似乎不起作用,不再排除'bad' url,并且help/better 仍然不匹配。我认为这是因为 / 不是单词边界。我肯定我对原始正则表达式的问题出在以下部分:

[^bad] - 匹配除 b、a 或 d 以外的任何单个字符

我的问题是,如何将 [^bad] 变成匹配任何不包含完整字符串 'bad' 的内容?

您将要使用否定前瞻 (?!bad) 而不是否定特定字母 [^bad]

我认为 (^help$|help\/(?!bad).*) 是您要查找的内容

编辑:如果你的意思是坏这个词,而不仅仅是 help/bad 你可以做到 (?!.*bad.*) 这会阻止你匹配 help/matbadtom例子。完整的正则表达式:(^help$|help\/(?!.*bad.*).*)