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

时间:2018-10-24 15:56:39

标签: regex regex-negation regex-group edgecast

好的,我正在写一个正则表达式,我想在某个URL路径及其下的所有子文件夹中进行匹配,但要排除其中的一些。就上下文而言,这是在Verizon Edgecast内部使用的,Verizon Edgecast是CDN缓存系统。它支持正则表达式,但不幸的是,我不知道它支持的正则表达式的“味道”,文档也不清楚。似乎支持所有正则表达式核心功能,而这正是我所需要的。不幸的是,阅读文档需要一个帐户,但是您可以在这里获得Edgecast的一般概念:https://www.verizondigitalmedia.com/platform/edgecast-cdn/

所以,这是一些示例数据:

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

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

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

链接: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应该是匹配

此正则表达式对我有用,除了帮助/更好不是匹配项。我敢肯定,它不匹配的原因是因为更好,它包含一个出现在“坏”字符中的字符。如果我将“ bettter”更改为“ getter”,那么它将成为一个匹配项,因为它不再包含b。

所以我真正想要的是我的“坏”字,只匹配整个坏字,而不匹配带有b,a或d的任何东西。我尝试使用单词边界来执行此操作,但是没有给我所需的结果,但是也许我只是语法错误,这就是我尝试过的:

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

但似乎不起作用,不再排除“错误” URL,帮助/更好的URL仍与此不匹配。我认为是因为/不是单词边界。我很肯定我原来的正则表达式存在问题:

[^ bad]-匹配不是b,a或d的任何单个字符

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

1 个答案:

答案 0 :(得分:1)

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

我认为(^ help $ | help \ /(?! bad)。*)是您要寻找的

编辑:如果您用“坏”一词表示所有含义,而不仅仅是帮助/坏,那么您也可以做到这一点(?!。* bad。*)。这将使您无法匹配“帮助/ matbadtom”。完整的正则表达式:(^ help $ | help \ /(?!。* bad。*)。*)

相关问题