2010-08-16 3 views
0

J'ai besoin d'une regex Visual Studio pour faire correspondre les exceptions avalées.Expression rationnelle de studio visuel pour correspondre aux exceptions avalées

C'est aussi loin que je suis arrivé, mais il correspond toujours un code valide comme ceci:

catch (ArgumentNullException) 
{ 
    //... 
    throw; 
} 


catch:Wh*\(:Wh*.*Exception.*\):Wh*\{[:Wh*.*]*[^(throw:Wh*.*;)].* 

Comment puis-je résoudre ce problème?

Modifier: Dois-je partir des commentaires qu'il n'est pas possible de tester l'absence d'un modèle dans une expression régulière dans Visual Studio? - C'est le sens de ma question. Je voudrais mettre de côté les questions de validité de l'approche (je suis pleinement conscient de FxCop et al, lexing et l'analyse, et ce seminal post.Je suis également conscient que les exceptions de déglutition est parfois OK).

+1

J'ai déjà vu de très mauvaises instances d'utilisation d'expressions rationnelles pour des tâches complètement inappropriées, mais cela prend vraiment le dessus. –

+0

Vous ne pouvez pas analyser C++ de manière fiable avec des expressions rationnelles. Je ne sais pas VS mais serais surpris s'il n'y avait pas un outil ou un plug-in pour vous aider. Bien sûr, les exceptions avalées sont mauvaises, sauf quand elles ne le sont pas. À un moment donné, vous devrez les réviser par code et le mieux que vous pouvez espérer est un outil qui vous donne des faux positifs à examiner et à documenter. – msw

+0

@Anon, s'il vous plaît pouvez-vous expliquer pourquoi cela est inapproprié. Il peut y avoir des faux positifs. Il ne sera peut-être pas possible de trouver toutes les exceptions avalées, mais en tant qu'outil d'identification des domaines à examiner, cela pourrait certainement être utile? – Ben

Répondre

2

Je vais répondre à ma propre question ici. C'est une question académique, parce que, bien sûr, il y a une différence fondamentale dans les capacités d'une grammaire sans contexte et une expression régulière comme l'ont si ardemment souligné les commentateurs précédents, plus il existe de nombreux outils non regex existants effectuer cette fonctionnalité pour moi. Je voulais explorer les fonctionnalités de Lookahead négatives de Visual Studio. Selon les rapports dans les commentaires here et here, le comportement lookahead négatif de Visual Studio ne se comporte pas comme vous pouvez vous attendre dans certaines circonstances (au point de certains l'appelant bogué).

Je ne suis pas un expert sur les expressions régulières, mais je m'attendrais à la regex (throw) pour correspondre à une ligne contenant seulement throw - et en effet il le fait. Je m'attendrais également à ~(throw) (c'est la syntaxe pour le lookahead négatif dans Visual Studio) pas pour correspondre à cette même ligne - mais, dans Visual Studio, fait. Ayant joué avec l'affinement de mon expression régulière originale, y compris la simplification du modèle de test, j'en arrive à la conclusion qu'il est difficile, presque impossible, d'effectuer des retards de recherche en utilisant l'implémentation actuelle de la recherche d'expressions régulières de Visual Studio.

Questions connexes