我在.NET:中有一个有效的RegEx模式
(?>.*param1=value1.*)(?<!.*param2=d+.*)
,如果匹配:
- 查询字符串包含
param1=value1
- 但不包含数字
param2=
它在.NET中工作。但是IIS URLRevrite抱怨它不是一个有效的模式。
我可以不在IIS URLRevrite的(?<! )
表达式后面使用零宽度否定外观吗?
请注意,我尝试在web.config中应用此模式(将<
和>
分别正确更改为<
和>
),以及在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
来增强此规则,使其仅与整个单词匹配。