2010-03-07 84 views
0

我在響應過濾器上工作。我試着去捕捉所有expresion:$ sometext.sometext $有以下正則表達式:^ \ w + \ w + \ $響應過濾器asp.net

我在執行它看起來像:

public override void Write(byte[] buffer, int offset, int count) 
{ 
    // Convert the content in buffer to a string 
    string contentInBuffer = UTF8Encoding.UTF8.GetString(buffer); 


    string [email protected]"^\\w+?\.\w+?\$"; 
    RegexOptions options = RegexOptions.Multiline; 

    MatchCollection matches = Regex.Matches(contentInBuffer , regex, options); 
    foreach (Match match in matches) 
    { 
     string value = match.Value; 

    } 
    outputStream.Write(UTF8Encoding.UTF8.GetBytes(contentInBuffer), offset, UTF8Encoding.UTF8.GetByteCount(contentInBuffer)); 

}

問題是當我在$ aspx頁面上寫$ Catch.Me $它不會被寫入方法中的正則表達式所捕獲。我在想什麼?

+0

您的替換方法是錯誤的。 Response.Filter內容被分塊。看看http://www.west-wind.com/weblog/posts/2009/Nov/13/Capturing-and-Transforming-ASPNET-Output-with-ResponseFilter – 2013-04-19 16:15:06

回答

0

您錯過了正則表達式模式中的第一個$。應該是:^\$\w+?\.\w+?\$。如果你使用這個,那麼它應該匹配。

我確定還有其他人,但測試.NET reg的前一種模式的一種方法是使用this online tester

您可能遇到的另一個問題是,ASP.NET會將輸出分成多個塊,因此您的過濾器可能會被多次調用(每個塊需要處理)。這可能會使您的正則表達式模式不匹配,因爲整個頁面不在一起。這裏有幾條與此有關的文章和一些解決方案: Article 1 @ west-wind.com,Article 2 @ highoncoding.com

唯一可能是問題的其他事情是如果編碼不正確。在上面的西風文章中,他爲他的GetString和GetBytes方法做了以下操作:

Encoding encoding = HttpContext.Current.Response.ContentEncoding; 
string output = encoding.GetString(..); 
byte[] buffer = encoding.GetBytes(output); 
+0

謝謝......它在我做這個測試時有效: string input =「$ some.text $

hej hej hej
」; string regex = @「^ \\ w +?\。\ w +?\ $」; RegexOptions options = RegexOptions.Multiline; MatchCollection matches = Regex.Matches(input,regex,options); foreach(匹配匹配) { string value = match.Value; } 但是,當我在「contentInBuffer」測試它doesnsent捕捉任何東西。爲什麼? – Sune 2010-03-07 08:26:48

+0

看到我修改的答案。 – patmortech 2010-03-07 10:51:16