我尝试使用StackPath的EdgeRules和他们的文档不是很清楚或好。我需要匹配多个目录中的网址,但排除任何网址的扩展名为m3u8
或单词segment
在它。这是他们的文档EdgeRules
这样可以将其限制为2个目录。
/(https://example.com(/(pics|vids)/).*)/
但这样行不通。
/(https://example.com(/(pix|vids)/).+(?!m3u8|segment).*)/
我一直在尝试使用https://regex101.com/,但我尝试似乎没有工作。我甚至不知道什么样的正则表达式,他们使用。希望能得到一些帮助。
2条答案
按热度按时间tzdcorbm1#
我不能测试这个所以道歉如果它的其他东西错了...
负面展望需要并排,而不是用或()分隔的括号括起来|)。我还在
.m3u8
的末尾添加了一个行尾字符($)。(https://example.com(/(pix|vids)/)(?!.*\.m3u8$)(?!.*segment.*).*)
请看这个例子:https://regex101.com/r/reVHWt/1
xam8gpfp2#
EdgeRules文档没有提到他们支持的正则表达式偏好,从示例中也不清楚。此外,示例
/(^http://example.com(/.*/)+.$)/
显示了非转义反斜杠,表明这是非标准正则表达式。我认为除了使用负向前看来排除任意模式之外没有其他方法。假设他们的正则表达式确实支持它,你可以尝试:
或使用正确转义的特殊字符:
正则表达式的解释:
^
--字符串起始处的锚点https:\/\/example\.com/
-文字https://example.com/
(pix|vids)
-文字pix
或vids
/
--斜杠(?!.*\bm3u8\b)
--m3u8
的负前瞻,在两端锚定\b
(?!.*\bsegment\b)
--对于segment
,同上.*$
-字符串末尾之前的任何其他字符