2011-08-07 5 views
0

방금 ​​코딩 생활에서 이상한 문제가 발생했습니다. 프로젝트에서을 사용하여 SQL 코드 뷰어를 사용자 지정했습니다. 예제에서 샘플 폼을 가져 와서 프로젝트에 넣었고 시작시 폼이 멈 춥니 다. 그러나 샘플 프로젝트에서 잘 실행되는 예제는 라이브러리와 함께 제공됩니다. 두 가지는 모두 Winform 앱입니다. 그리고 더 furthur 조사는 코드가 라이브러리 자체가 아닌 샘플 양식한 응용 프로그램에서 MatchCollection 중단을 사용합니다.

var matches = regex.Matches(text); 
foreach (Match m in matches) // Here it hangup 
{ 
    ... 
} 

하지만 샘플의 WinForm 응용 프로그램을 실행할 때이 될 수있는 바로 그 자리로 물어 실행에있는 코드를 끊고 저를 보여줍니다 도서관과 함께 제공됩니다. 난 너무 혼란 스러워요. Regex는 애플리케이션과 상관없이 동일한 기능을 수행해야합니다. 텍스트는 길지는 않지만 몇백 자 정도입니다. 그리고 정규 표현식은 동일합니다. 나는 샘플 폼을 추출하여 프로젝트에 넣고 호출하는 것 외에는 다른 것을하지 않았습니다.

나를 도와 주거나 올바른 방향으로 나를 가리킬 수 있습니까? "정규 표현식과 같은 기본으로"뭔가 구현에서 동일하게 수행 할

+0

별도의 테스트 앱에서 동일한 텍스트를 동일한 정규식으로 실행하면 어떻게됩니까? "hangup"이란 정확히 무엇을 의미합니까? 그것은 당신의 CPU를 사용합니까? – svick

+0

샘플 코드는 동일한 .NET Framework 버전을 사용합니까? – NirMH

+0

또한 정규 표현식을 게시하십시오 (너무 크지 않은 경우 텍스트). 디버거의 코드를 단계별로 실행 했습니까? 그렇다면 언제 중단 되었습니까? 루프에 처음 들어가거나 일치 항목 중 하나에 항목이 있습니까? –

답변

1

당신의 가정은 여러 가지 이유로 잘못 :

  • 정규 표현식은 더 이상 정기적으로하지 않습니다. 역 참조 (backreferences), 둘러보기 (lookaround expressions), 재귀 패턴 일치 (recursive pattern matching) 등과 같은 현대적인 추가 기능은 수십 년 전의 기본 정규 표현식을 크게 확장했습니다.
  • dozens of regex flavors이 있으며, 각기 다른 기능의 하위 집합을 구현하며 많은 경우 동일한 토큰을 여러 가지 방식으로 해석합니다. JavaScript (클라이언트 측)와 .NET (서버 측) 정규 표현식의 차이점은 아마도 가장 관련성이 높고 소년은 다른 두 가지입니다.
  • 정규식이 일치하는 방식 (성능에 많은 영향을 미칠 수 있음)에 영향을 미치고 해당 매개 변수가 올바르게 설정되었는지 확인해야하는 여러 가지 매개 변수 (점이 개행 문자와 일치하는지 여부와 같음)가 있습니다.

아마도 catastrophic backtracking이라는 문제가 발생하고 있습니다. 라이브러리 자체의 "멈춤"은 종종 이로 인해 발생합니다. 그게 맞는지, 어떻게 수정해야하는지 알아 보려면 정규 표현식, 그 정규 표현식 및/또는 문제가있는 입력 텍스트 샘플을 확인해야합니다. 질문을 수정하고 세부 정보를 추가하십시오.

관련 문제