我正在處理重寫URL的ASP.NET響應過濾器,以在特定情況下指向不同的域。在正則表達式中幫助消極lookbehind
因爲ASP.NET將響應寫入塊,所以在頁面完全流式傳輸之前,我的過濾器會被調用多次。這意味着我需要小心,每次調用Regex.Replace都不會雙重替換一個url(最終以http://foo.comhttp://foo.com/path結尾)。
要做到這一點,我試圖使用的替代負回顧後的表情,但似乎並不奏效:
content = Regex.Replace(content,"((?<!" + newDomain + ")" + match + ")", newDomain + match);
這將創建像一個正則表達式:
((?<!http://www.foo.com/)actual/url)
但是,它似乎不尊重後面的外觀,我得到一切雙倍取代。
任何想法?
編輯:當我使用像正則表達式教練這樣的工具對樣本數據進行測試時,這個正則表達式很有效。編輯2:添加了斜槓,它實際上存在。
到底在哪不 「匹配」 變量從何而來?更確切地說,你是通過解析內容中的URL來獲得它們的嗎?在該行之前的「匹配」是什麼樣的? – mercator 2009-07-15 22:16:40
你想要替換域名或路徑嗎?正如你聲稱你在正則表達式教練中獲得了你期望的比賽,但是你沒有得到你期望的替換動作。 – 2009-07-15 22:33:27