2010-08-16 3 views
0

삼키는 예외와 일치시키기 위해 Visual Studio 정규식이 필요합니다.삼키기 예외와 일치하는 비주얼 스튜디오 정규식

이것은 지금까지 내가 가진 같다,하지만 여전히 같은 유효한 코드와 일치 :

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


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

가 어떻게이 문제를 해결할 수 있습니까?

편집 : Visual Studio의 정규 표현식에서 패턴이 없다는 테스트가 가능하지 않다는 의견에서 받아 들여야합니까? -이게 내 질문의 핵심이야. 나는 접근의 타당성에 대한 질문을 제쳐두고 싶습니다 (나는 FxCop 외, 렉싱과 파싱을 완전히 알고 있습니다.이 seminal post입니다. 예외를 삼키는 것이 가끔은 괜찮다는 것도 알고 있습니다).

+1

전에 완전히 부적절한 작업을하기 위해 regexes를 사용하는 몇 가지 매우 나쁜 경우를 보았습니다. 그러나 이것은 실제로 케이크를 필요로합니다. –

+0

regexps를 사용하여 C++을 안정적으로 구문 분석 할 수 없습니다. 나는 VS를 모르지만 당신을 도울 수있는 도구 나 플러그인이 없다면 놀라실 것입니다. 물론, 삼켜지는 예외는 그렇지 않은 경우를 제외하고 나쁘다. 어떤 시점에서 코드를 검토해야하며, 사용자가 기대할 수있는 최선의 방법은 오류를 검사하고 문서화 할 수있는 도구입니다. – msw

+0

@Anon, 이것이 부적절한 이유에 대해 설명해주십시오. 가양 성이있을 수 있습니다. 삼켜지는 모든 예외를 찾아내는 것이 가능하지 않을 수도 있지만, 검토 할 영역을 확인하는 도구로서 반드시 유용 할 수 있습니다. – Ben

답변

2

여기에서 내 자신의 질문에 답변 할 것입니다. 이것은 학문적 인 질문입니다. 왜냐하면 이전의 주석가들이 그렇게 열심히 지적한 바와 같이 문맥 자유 문법 및 정규 표현식의 기능에 근본적인 차이가 있기 때문입니다. 게다가 기존의 정규 표현식 기반이 아닌 다양한 도구가 있습니다. 나를 위해이 기능을 수행하십시오.

저는 Visual Studio의 부정적인 선행 검사 기능을 탐색하고자했습니다. 의견 herehere의 보고서에 따르면 Visual Studio의 부정적인 선행 동작은 일부 상황 (버그가있는 호출 지점)에서 예상대로 동작하지 않습니다.

정규 표현식에 대한 전문 지식이 없지만 (throw) 정규 표현식이 throw만을 포함하는 행과 일치해야합니다. 실제로는 그렇습니다. 또한 ~(throw) (Visual Studio에서 부정적인 미리보기 문구에 대한 구문입니다.) 이 아닌 동일한 줄에 일치하는이 있지만 Visual Studio에서는 이됩니다.

테스트 패턴을 단순화하는 것을 포함하여 원래의 정규 표현식을 수정하는 과정에서 Visual Studio의 정규 표현식 검색을 사용하여 부정적인 미리보기를 수행하는 것이 어렵고 불가능하다는 결론에 도달했습니다.