2013-03-18 3 views
0

나는 정규식이 있습니다Visual Studio에서이 역 정규식 일치가 작동하지 않는 이유는 무엇입니까?

Rubular에서 작동 예상대로 두 문자열의 일치
ConfigurationManager.ConnectionStrings.Item\(\"((?!foo).)*\" 

:

ConfigurationManager.ConnectionStrings.Item("foo") 
ConfigurationManager.ConnectionStrings.Item("bar") 

그러나, 나는 비주얼 스튜디오 2005에서 같은 표현을 실행하는 경우 - 나는 성냥이 없어. 단어가 foo과 일치하지 않으므로 실제로 ConfigurationManager.ConnectionStrings.Item...이있는 모든 단일 인스턴스와 일치해야합니다.

물론 Visual Studio에서는 역식이 작동하지 않는 한.

그렇다면 Visual Studio 2005에서 동일한 결과를 얻으려면 어떻게해야합니까?

+1

VisualStudio를 모르지만 [Reverse Lookaround] (http://www.regular-expressions.info/lookaround.html)는 많은 Regex 엔진에서 구현되지 않았습니다. –

+0

@dystroy, 나는 이상하게 여겼다. 그것은 내가 추측하는 구현자를위한 최후의 경우 인 것들 중 하나입니다. 그래서 그것들이 돌아 다니면 완료됩니다. 꽤 복잡한 것 같아요. –

+0

@dystroy .NET에 있습니다. 그리고 실제로는 - 대부분의 현대 정규식 엔진에서 어느 정도까지입니다. 여기에 사용 된 고정 길이 어설 션은 거의 보편적으로 지원됩니다./편집 아,이 VS에 대한 검색 및 바꾸기 기능에 관한 것입니다. 그런 다음 모든 배팅이 해제됩니다. –

답변

2

아래의 정규 표현식은 regular expression for find and replace feature in Visual Studio의 구문 ()과 일치합니다. 정규식 기반 정규식 구문이 아닙니다. 설명에 따라

ConfigurationManager.ConnectionStrings.Item\("(~(foo).)*" 

~(pattern)

:

Prevent match ~(X) Prevents a match when X appears at this point 
         in the expression. For example, real~(ity) matches 
         the "real" in "realty" and "really," but not the 
         "real" in "reality." 

방법 부정적인 모습 미리 (?!pattern) 작품과 유사한 작동합니다.

+0

환상적인 대답은 예상대로 정확하게 작동했습니다! 7 분 안에 답을 표시 할 수 있습니다. –

+0

@MichaelPerrenoud 그 7 분은 매우 길다. –

관련 문제