好的,我正在编写一个我想在某个 url 路径上匹配的正则表达式,以及它下面的所有子文件夹,但有一些被排除在外。对于上下文,这是在 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 应该匹配
这个正则表达式对我有用,除了帮助/更好不是匹配项。我敢肯定,它不匹配的原因是因为更好,它包含一个出现在“坏”中的字符。如果我将 'better' 更改为 'getter' 那么它就变成了匹配,因为它不再有 ab 了。
所以我真正想要的是我的“坏”只匹配整个单词 bad,而不匹配任何带有 b、a 或 d 的东西。我尝试使用单词边界来做到这一点,但没有给我我需要的结果,但也许我只是语法错误,这就是我尝试过的:
(^help$|help\/[^\bbad\b].*)
但似乎不起作用,不再排除“坏”网址,帮助/更好仍然不匹配。我认为这是因为 / 不是单词边界。我很肯定原始正则表达式的问题在于:
[^bad] - 匹配任何不是 b、a 或 d 的单个字符
我的问题是,我怎样才能将 [^bad] 变成与不包含完整字符串 'bad' 的任何内容相匹配的内容?