我在 .NET 中有一个有效的正则表达式模式:
(?>.*param1=value1.*)(?<!.*param2=\d+.*)
匹配如果:
- 查询字符串包含
param1=value1
- but does not包含
param2=
一个号码
它在.NET 中工作。然而 IIS URLRewrite 抱怨它不是一个有效的模式。
我可以不使用零宽度负向查找吗(?<! )
IIS URLRewrite 的表达式?
请注意,我尝试在 web.config 中应用此模式(正确更改<
and >
to <
and >
分别以及在 IIS 管理器中 - 都没有成功。
IIS URLRewrite 默认正则表达式语法是ECMA脚本,这与 .NET 正则表达式语法不兼容。看URL 重写模块配置参考 http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference:
ECMAScript
– Perl 兼容 (ECMA脚本 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf符合标准)正则表达式语法。这是任何规则的默认选项。
你根本不能使用后视,你只能依赖前视:
^(?!.*param2=\d).*param1=value1.*
图案解释:
-
^
- 字符串的开头
-
(?!.*param2=\d)
- 如果有param2=
后跟一个数字 (\d
) 在除换行符之外的 0+ 个字符之后匹配失败(不返回匹配项)
-
.*param1=value1.*
- 匹配包含以下内容的整行param1=value1
您可以通过添加来增强此规则\b
around param1=value1
仅将其作为整个单词进行匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)