IIS Url Rewrite RegEx 与 .NET RegEx 的差异

2024-01-31

我在 .NET 中有一个有效的正则表达式模式:

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

  • 查询字符串包含param1=value1
  • but does not包含param2=一个号码

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

我可以不使用零宽度负向查找吗(?<! )IIS URLRewrite 的表达式?

请注意,我尝试在 web.config 中应用此模式(正确更改< and > to &lt; and &gt;分别以及在 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(使用前将#替换为@)

IIS Url Rewrite RegEx 与 .NET RegEx 的差异 的相关文章

随机推荐