我正在设计一个正则表达式,用于在一些IIS Url Rewrites中使用。目的是捕获以下类型的URL:
我的正则表达式正确地忽略了前两种情况,但仍然匹配第三种情况。这里的前瞻有什么问题吗?
- 不仅仅是根目录下包含一个句点的文件
- 不包含查询字符串
- 不属于特定的子目录集,即“账户”和“公共”
^(?!(Account)|(Public))([^./]+)(/[^?]*)?$
使用RegexPal测试集:
file.aspx
Account/otherfile.aspx
Public/otherfile.aspx
otherfolder1/otherfile.aspx?stuff=otherstuff
otherfolder2/otherfolder/otherfile.aspx
otherfolder3/
otherfolder4
我的正则表达式正确地忽略了前两种情况,但仍然匹配第三种情况。这里的前瞻有什么问题吗?
(?!(Account)|(Public))
是负向前瞻,而不是后顾。而且括号中的Account
和Public
并没有起到任何作用,因为前瞻不参与匹配。我认为应该像这样:(?!Account|Public)
。否则,正则表达式似乎确实可以工作,但在 RegExPal 中无法工作。 - alan