Regex:向现有正则表达式添加异常(完全匹配)



我有这个正则表达式:(.+?)(?:index.html?|.html?)(.*)?$

这被用来(不区分大小写(触发所有URL的重定向;index.html";或";。html";。通过触发具有两个匹配组的重定向并省略中间部分(其为"index.html"或".html"(来去除该部分

示例输入URL:https://www.example.com/somePath/subPath/index.Html?someQueryString

这将被重定向到:https://www.example.com/somePath/subPath/?someQueryString

这一切都按预期进行,但现在我想给这个正则表达式添加一个异常。例外的是,如果第一组中存在某个单词,则不应触发此重定向。

让我们说这个词是"安全路径";。以下URL不应触发重定向,因为它包含单词";安全路径";在第一组中:https://www.example.com/safePath/subPath/index.Html?someQueryString

如何更改正则表达式以满足此异常?

这似乎有效,尽管它返回三个捕获组而不是两个(它将链接的第一部分拆分为两个组(:

(https://www.example.com/)(?!safePath/)(.+?)(?:index.html?|.html?)(.*)?$

(注意:只有当safePath是问题中指定的链接中的第一组时,这才匹配。因此,像https://www.example.com/somePath/safePath/index.html?someQueryString这样的链接仍然匹配,因为safePath在第二组中。(

Python 中的测试代码

编辑:我认为这应该检测safePath是否在URL:中的任何位置

^(?!.*/safePath/)(.+?)(?:index.html?l.html?)(.*)?$

以下URL不应触发重定向,因为它包含单词"安全路径";在第一组中:https://www.example.com/safePath/subPath/index.Html?someQueryString

在这种情况下,您可能可以在regex:中使用负面展望来实现这一点

(?!.*safepath)(.+?)(?:index.html?|.html?)(.*)?$
^^^^^^

或者,可能,您可以将其作为一个单独的条件,例如:

if(url.contains?('safepath')) {
return false;
}

(这只是作为伪代码,因为您没有指定要使用的语言/工具。(

最新更新