我有这个正则表达式:(.+?)(?: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;
}
(这只是作为伪代码,因为您没有指定要使用的语言/工具。(