2011-09-23 2 views
6

옆 : 좋아, 내가 정규식으로 이런 식으로 HTML을 따로 골라서는 안되는 것을 알지만, 내가 필요로하는 것이 가장 간단하다. 내가 $와 문자열의 끝을 찾고 있어요 방법문자열 정규 표현식의 끝이 .NET에서 최적화되어 있습니까?

Regex BodyEndTagRegex = new Regex("</body>(.*)$", RegexOptions.Compiled | 
    RegexOptions.IgnoreCase | RegexOptions.Multiline); 

주의 사항 :

나는이 정규식이있다.

전체 문자열을 검사 할 필요가 없도록 .NET의 정규식이 최적화되어 있습니까? 그렇지 않다면 결국 어떻게 시작할 수 있도록 최적화 할 수 있습니까?

+0

이상한 질문을 보인다 왼쪽? – Cocowalla

+0

글쎄, 아주 긴 문자열에서이 작업을 수행 할 것이며,이를 최적화하는 더 좋은 방법이 있는지 알고 싶을뿐입니다. –

+0

정말 이것은 'LastIndexOf'와'Substring'에 대한 호출보다 간결합니다. – AakashM

답변

9

당신은 Right-to-Left Mode 옵션을 지정하여 그 자체를 제어 할 수 있지만 정규식 엔진은하지 않습니다 최적화이 자동으로 당신이 옵션을 지정하여 스스로 할 때까지

:

을 나는 중요한 점은 생각

기본적으로 정규식 엔진은 왼쪽에서 오른쪽으로 검색합니다.

RegexOptions.RightToLeft 옵션을 사용하여 검색 방향을 바꿀 수 있습니다. 검색은 문자열의 마지막 문자 위치 인 에서 자동으로 시작됩니다. Regex.Match (String, Int32)와 같은 시작 위치 매개 변수를 포함하는 패턴 일치 메서드의 경우 시작 위치는 검색을 시작할 문자 위치 인 의 인덱스입니다.

중요 :

RegexOptions.RightToLeft 옵션은 검색 방향 만 변경; 그들이 할 수 _wouldn't_ 의심 할 이유 - 가 오른쪽 에서 정규 표현식 패턴을 해석하지 않습니다는

+3

방금 ​​10,000 개의 반복을 사용하여 긴 문자열에서 OP의 정규 표현식을 사용한 빠른 테스트를 수행했습니다. RegexOptions.RightToLeft없이 1,950ms, 그냥 64ms. – Cocowalla

+0

@ 코코 발라 : 아주 좋은 일러스트! – sll

+1

...'LastIndexOf'를'Substring'과 결합하여 사용하는 것이 더 빠릅니다 - 단지 15ms입니다. 하지만 당신이 좋은 이유가 없다면, 나는 가독성과 유지 보수성을 위해 정규식을 고수 할 것이다 :) – Cocowalla

관련 문제