Regex -按关键字排除URL

zsohkypk  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(120)

我尝试使用StackPath的EdgeRules和他们的文档不是很清楚或好。我需要匹配多个目录中的网址,但排除任何网址的扩展名为m3u8或单词segment在它。这是他们的文档EdgeRules
这样可以将其限制为2个目录。

/(https://example.com(/(pics|vids)/).*)/

但这样行不通。

/(https://example.com(/(pix|vids)/).+(?!m3u8|segment).*)/

我一直在尝试使用https://regex101.com/,但我尝试似乎没有工作。我甚至不知道什么样的正则表达式,他们使用。希望能得到一些帮助。

tzdcorbm

tzdcorbm1#

我不能测试这个所以道歉如果它的其他东西错了...
负面展望需要并排,而不是用或()分隔的括号括起来|)。我还在.m3u8的末尾添加了一个行尾字符($)。
(https://example.com(/(pix|vids)/)(?!.*\.m3u8$)(?!.*segment.*).*)
请看这个例子:https://regex101.com/r/reVHWt/1

xam8gpfp

xam8gpfp2#

EdgeRules文档没有提到他们支持的正则表达式偏好,从示例中也不清楚。此外,示例/(^http://example.com(/.*/)+.$)/显示了非转义反斜杠,表明这是非标准正则表达式。
我认为除了使用负向前看来排除任意模式之外没有其他方法。假设他们的正则表达式确实支持它,你可以尝试:

/^https://example.com/(pix|vids)/(?!.*\bm3u8\b)(?!.*\bsegment\b).*$/

或使用正确转义的特殊字符:

/^https:\/\/example\.com/(pix|vids)/(?!.*\bm3u8\b)(?!.*\bsegment\b).*$/

正则表达式的解释:

  • ^--字符串起始处的锚点
  • https:\/\/example\.com/-文字https://example.com/
  • (pix|vids)-文字pixvids
  • /--斜杠
  • (?!.*\bm3u8\b)--m3u8的负前瞻,在两端锚定\b
  • (?!.*\bsegment\b)--对于segment,同上
  • .*$-字符串末尾之前的任何其他字符

相关问题