我在处理响应过滤器。我试图捕捉所有表达: $ 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方法中的正则表达式捕获。我错过了什么?
答案 0 :(得分:0)
您缺少正则表达式模式中的第一个$。应该是:^\$\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);