2011-02-28 5 views
6

아주 간단합니다. 모든 입력에 대해 가장 빠른 정규 표현식은 무엇입니까?C#. 어떤 문자열과도 일치하는 가장 빠른 정규식

편집 : 이유 투표? 매우 합법적 인 질문처럼 보입니다. 나는 정규식 필터를 사용하는 함수를 사용하고 무엇이 가장 빨리 모든 것을 일치시키는 지 알고 싶다. "정규 표현식을 사용하지 않음"은 답이 아닙니다.

+5

이 문제에 대해 생각해 보셨습니까? 나는 초콜릿 주전자처럼 유용하게 들린다. –

+12

... 정규식을 사용하지 않습니까? –

+2

어떤 실제 시나리오에서이 질문이 나왔습니까? – Oded

답변

4
class FastestRegex 
{ 
    public static readonly Regex RE = new Regex("", RegexOptions.Compiled); 
} 
+1

그냥 지옥에 대한 메모,하지만 당신은뿐만 아니라 그냥 .NET 내부 Regex 캐시를 사용하여 Regex – LorenVS

+0

정적 기능에 충실 할 수 있습니다 @ LorenVS : 얼마나 많은 regexes를 만들고있어 당신이 어떤 크기 정규식 캐시를 설정했습니다. 하지만 당신은 ** 이것이 ** 재사용 될 것이라는 것을 알고 있습니다. 그래서 수동으로 캐시하지 않으시겠습니까? –

1

나는이 모든 문자와 일치를 확인할 것이다 뭔가

.*? 

처럼해야한다고 말을하지만, 때문에 게으른 연산자, 전혀 문자열과 일치하지 않을 것이다. 나는 그것이 첫 번째 문자를 확인하기 전에 돌아올 것이라고 상상한다. 이것은 빈 문자열이 모든 입력에 대해 true를 반환하지 않는다고 가정합니다.

1

나는 빈 문자열, "", 또는 시작의 입력, "^", 하나가 모든 문자열에 대한 가장 빠른 (긍정적) 경기를 초래할 것이라고 추측에는 요.

몇 가지 빠른 테스트를 실행하면 "^" 패턴은 일반적으로 Oracle 1.6 JRE에서 ""보다 빠르지 만 Mono 2.4에서는 그 반대입니다. 두 경우 모두 .*?이고 길이는입니다.

하지만 다시 : 자신의 시스템에서 문제를 테스트하십시오.

0

정규식을 실행하지 않는 가장 빠른 정규식이 없습니다. 따라서 가장 빠른 정규식이 실제로 실행되는 정규식입니다. /[\S\s]?/ 또는 더 빠르다고 생각합니다. /.?/s

Addon - Interlocking 불구하고 /^/은 펄을 반복적으로 빠져 나오는데 3 천만 번 반복됩니다. 그러나, 모든 사전을 미리 컴파일하면 먼저 5의 요인에 의해 모든 속도가 느려집니다. 어쩌면 너무 단순한 표현이기 때문일 수도 있습니다.

관련 문제