IIS UrlRewrite RegEx与.NET RegEx的差异



我在.NET:中有一个有效的RegEx模式

(?>.*param1=value1.*)(?<!.*param2=d+.*),如果匹配:

  • 查询字符串包含param1=value1
  • 不包含数字param2=

它在.NET中工作。但是IIS URLRevrite抱怨它不是一个有效的模式。

我可以不在IIS URLRevrite的(?<! )表达式后面使用零宽度否定外观吗?

请注意,我尝试在web.config中应用此模式(将<>分别正确更改为&lt;&gt;),以及在IIS管理器中应用,但都没有成功

IIS URLRevrite默认正则表达式语法为ECMAScript,与.NET正则表达式语法不兼容。请参阅URL重写模块配置参考:

ECMAScript–兼容Perl(符合ECMAScript标准)的正则表达式语法。这是任何规则的默认选项。

你根本不能使用lookahead,你只能依靠lookahead:

^(?!.*param2=d).*param1=value1.*

模式解释

  • ^-字符串开始
  • (?!.*param2=d)-如果除换行符之外的0+个字符后有param2=后面跟一个数字(d),则匹配失败(返回不匹配)
  • .*param1=value1.*-匹配包含param1=value1的整行

您可以通过在param1=value1周围添加b来增强此规则,使其仅与整个单词匹配。

最新更新