2010-03-07 3 views
0

Je travaille sur un filtre de réponse. Im essayant d'attraper tous les expresion: $ sometext.sometext $ avec l'expression régulière suivante:.^\ W + \ w + \Filtre de réponse asp.net

$

Dans ma mise en œuvre, il ressemble à:

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)); 

}

Le problème est lorsque j'écris $ Catch.Me $ sur une page ASPX Il ne sera pas attrapé par mon expression régulière dans la méthode d'écriture. Qu'est-ce que je manque?

+0

Votre méthode de remplacement est erronée. Réponse. Le contenu du filtre est fragmenté. Regardez http://www.west-wind.com/weblog/posts/2009/Nov/13/Capturing-and-Transforming-ASPNET-Output-with-ResponseFilter –

Répondre

0

Il vous manque le premier $ de votre modèle regex. Devrait être: ^\$\w+?\.\w+?\$. Si vous l'utilisez, il devrait correspondre.

Je suis sûr qu'il en existe d'autres, mais une façon de tester vos modèles .NET reg ex est d'utiliser this online tester.

L'autre problème que vous pourriez avoir est que ASP.NET casse la sortie en plusieurs morceaux, ainsi votre filtre pourrait être appelé plusieurs fois (avec chaque morceau qui doit être traité). Cela pourrait rendre vos motifs regex ne pas correspondre parce que la page entière n'est pas là ensemble. Voici quelques articles liés à ceci et quelques solutions: Article 1 @ west-wind.com, Article 2 @ highoncoding.com.

La seule autre chose qui pourrait être un problème serait si le codage n'est pas correct. Dans l'article ouest-vent ci-dessus, il fait ce qui suit pour ses méthodes GetString et GetBytes:

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

Merci ... Cela fonctionne quand je fais ce test: chaîne entrée = "$ some.text $

hej hej hej
"; chaîne regex = @ "^ \\ w +? \. \ W +? \ $"; RegexOptions options = RegexOptions.Multiline; MatchCollection correspond = Regex.Matches (entrée, regex, options); foreach (Match dans les matchs) { string value = match.Value; } Mais quand je suis en train de tester sur "contentInBuffer" il ne capture rien. Pourquoi? – Sune

+0

Voir ma réponse révisée. – patmortech

Questions connexes