响应过滤器asp.net

问题描述:

我在响应过滤器上工作。我试着去捕捉所有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

您错过了正则表达式模式中的第一个$。应该是:^\$\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