【问题标题】:Response filter asp.net响应过滤器 asp.net
【发布时间】:2010-03-07 07:52:54
【问题描述】:

我正在研究响应过滤器。我试图用以下正则表达式捕获所有表达式:$sometext.sometext$:^\w+?.\w+?\$

在我的实现中它看起来像:

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 regex=@"^\\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$ 时,它不会被 write 方法中的正则表达式捕获。我错过了什么?

【问题讨论】:

标签: asp.net filter response


【解决方案1】:

您缺少正则表达式模式中的第一个 $。应该是:^\$\w+?\.\w+?\$。如果你使用它,那么它应该匹配。

我确定还有其他方法,但测试您的 .NET reg ex 模式的一种方法是使用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);

【讨论】:

  • 谢谢...当我做这个测试时它可以工作: string input = "$some.text$
    hej hej hej
    ";字符串正则表达式=@"^\\w+?\.\w+?\$"; RegexOptions 选项 = RegexOptions.Multiline; MatchCollection 匹配 = Regex.Matches(input, regex, options); foreach(匹配中的匹配){ 字符串值 = match.Value;但是当我在“contentInBuffer”上进行测试时,它并没有捕捉到任何东西。为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多