2016-07-19 49 views
1

我在.NET有效的正則表達式:使用.NET正則表達式IIS UrlRewrite正則表達式的差異

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

  • 查詢字符串包含param1=value1
  • 包含param2=一個數字

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

我可以不使用帶有IIS URLRewrite的(?<! )表達式的零寬度負面外觀嗎?

注意,我嘗試應用在IIS管理器這種模式無論是在web.config中(分別適當改變<>&lt;&gt;,以及 - 均無功而返

+1

難道你不能簡化它爲'^(?!。* param2 = \ d)。* param1 = value1'?或者如果你需要匹配整個字符串,添加尾部'。*':'^(?!。* param2 = \ d)。* param1 = value1。*' –

+0

@WiktorStribiżew謝謝!這工作!但是,這個問題仍然存在。我認爲使用的2個RegEx引擎是相同的。 –

+0

不,你可以看到語法不同。 –

回答

1

IIS默認URLRewrite正則表達式的語法是的ECMAScript,就是不使用.NET正則表達式的語法兼容見URL Rewrite Module Configuration Reference

ECMAScript - Perl兼容(ECMAScript符合標準)的正則表達式。 句法。這是任何規則的默認選項。

您不能使用回顧後可言,你將不得不只依靠向前看符號:

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

模式闡釋

  • ^ - 字符串的開始
  • (?!.*param2=\d) - 如果有param2=後跟一個數字(\d)之後除換行符以外的字符0+失敗的比賽(不返回匹配)
  • .*param1=value1.* - 匹配的是包含param1=value1

一整行可以加強這方面的規則,加入各地param1=value1\b只匹配它作爲整個詞。