正则表达式 PCRE 模式选择所有以 /first-url-segment/ 开头的路由,并且在 URL 的后半部分不包含“iframe”

问题描述

我试图过滤掉以特定字符串开头但没有“iframe”子字符串的路径。 这似乎对我有https://regex101.com/r/rIMFDP/1

^\/csr_and_sustainability_information\/(?!.*iframe)

但在亚马逊上这个正则表达式不起作用https://docs.aws.amazon.com/waf/latest/developerguide/waf-regex-pattern-set-creating.html

说明

AWS WAF 支持 PCRE 库 libpcre 使用的模式语法

我想知道是否可以在该标准内重现我想要的内容

所以我想选择所有以 /csr_and_sustainability_information/ 开头的路线,并且不要在 URL 的后半部分包含 "iframe"

解决方法

你可以使用像 POSIX 兼容的正则表达式

^/csr_and_sustainability_information/([^i]|i(i|f(i|r(i|a(i|mi))))*([^fi]|f([^ir]|r([^ai]|a([^im]|m[^ei])))))*(i(i|f(i|r(i|a(i|mi))))*(f(r?|ram?))?)?$

this regex demo

([^i]|i(i|f(i|r(i|a(i|mi))))*([^fi]|f([^ir]|r([^ai]|a([^im]|m[^ei])))))*(i(i|f(i|r(i|a(i|mi))))*(f(r?|ram?))?)?$ 部分确保 iframe 之后没有 /csr_and_sustainability_information/ 字符串。