2012-01-12 3 views
0
re = new Regex ((.*?)someliteraltext(.*?moreliteral), RegexOptions.Singleline); 
re.Match(c); 

단선이 사용되므로 "." 개행과 일치합니다.왜이 정규식은 느린가요? 더 빠를 수 있습니까?

약 100k 문자의 텍스트 청크에서 실행하고 분 동안 실행됩니다.

더 빠를 수 있습니까?

+0

시작 '(. *?)'이 필요합니까? – Wrikken

+0

이것을'IndexOf'에 다시 작성하는 것은 어떻습니까? – CodesInChaos

+1

또는 접두어를'^'접두어로 붙이십시오. – CodesInChaos

답변

3

가장 느리게 느려지는 것은 시작 (. *?)이라는 의견에 동의합니다. 첫 번째 "someliteraltext"앞에 1000자를 사용하면 이미 정규 표현식의 해당 부분과 1001 일치합니다. @CodeInChaos '접두사를 ^ (문자열의 시작 부분)으로 제안하면 이러한 일치를 신속하게 제한 할 수 있습니다. 그것이 받아 들일 수 없다면, 당신은 더 나은 대답을 얻기 위해 성냥으로 무엇을하려고하는지 더 설명해야 할 것입니다.

+0

^잘 작동합니다. 시도해보아야합니다. –

2

많은 역 추적이 필요하므로 속도가 느립니다. 여기 기사 :

http://www.regular-expressions.info/engine.html

당신에게 얼마나 많은 일이하고있어 몇 가지 아이디어를 줄 수 있습니다.

@Wrikken은 초기 "(. *?)"을 제거함으로써 제안했습니다. 이 캡처 그룹은 문자열의 시작부터 "someliteraltext"까지 모든 것을 캡처합니다.

또는 "IndexOf"를 사용하여 "someliteraltext"를 찾은 다음 "moreliteral"을 사용하십시오. 그것은 더 빨라야합니다.

관련 문제