请参阅here,以获取有关我要执行的操作的背景知识。简而言之,我想匹配/path/foo/
下的所有路径,除非叶子目录(不是叶子文件)为script
。
在该问题中有一些答案似乎可行,但是我试图弄清楚为什么我尝试的某个解决方案不起作用。正则表达式是这样的:
^/path/foo(?:/[^/]+)*(?!/script)/[^/]*$
我对此的有限理解是:
/path/foo
/[^/]+
。基本上,/
的0个或多个重复模式后跟一些目录名(我知道文件路径中的空格或特殊字符的问题。我暂时忽略了这一点)/script
。因此,如果在(2)中有许多重复的文件夹之后,下一个是/script
,则它失败了,并假设其后是... /
/
字符,后跟字符串的结尾。但是,this doesn't work。似乎与以/path/foo
开头的所有内容都匹配。
此正则表达式有什么问题?
答案 0 :(得分:3)
考虑输入:
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = "IdentityServerURL";
options.ApiName = "apiScope";
});
正则表达式匹配如下:
/path/foo/a/b/script/file
您想要的是否定的回头看,而不是否定的前瞻:
^ Ok: No text before here
/path/foo "/path/foo"
(?:/[^/]+)* "/a/b/script"
(?!/script) Ok: Text after here is "/file"
/ "/"
[^/]* "file"
$ Ok: No text after here