욕심한다, 게으른 행동하지만, 다음과 같은 코드가 아닌 :정규식 나는 기본적으로 내 <strong>정규식</strong> 내가 원하는 욕심 동작이 발생할 것이라고 생각
Regex keywords = new Regex(@"in|int|into|internal|interface");
var targets = keywords.ToString().Split('|');
foreach (string t in targets)
{
Match match = keywords.Match(t);
Console.WriteLine("Matched {0,-9} with {1}", t, match.Value);
}
출력 :
Matched in with in
Matched int with in
Matched into with in
Matched internal with in
Matched interface with in
지금 난 내가 단순히 길이 하강하여 키워드를 분류하는 경우는이 작은 예를 들어 작동시킬 수 있지만,
-
수 있다는 것을 깨닫게 이 알파벳 순서로 유지하는 것이 중요합니다
- 나는 예상대로이 가 작동하지 않는 이유를 이해하려면, 그리고
- 내가 일하고 실제 프로젝트는 정규식에 더 많은 단어를 가지고 .
제 질문은 : 왜 이것이 게으름을 피우고 어떻게 수정합니까?
실제 사용량이 더 복잡한 지 잘 모르겠지만 위의 예제가 실제로 수행하는 작업 인 경우 IndexOf 메서드와 일치하는 단어 목록을 반복하는 것이 천 번 더 좋을 것이라고 생각합니다 . 정규 표현식에 번갈아 단어 집합이 포함되어 있다면 성능이 떨어질 수 있습니다. – Josh
@Josh - 아니, 예제가 단순화되었습니다. 실제 응용 프로그램은 렉서 및 문법 파서를 생성하기 위해 언어 파일을 읽는 중입니다. 내 정규 표현식에 녹슬지는 않은 것 같다. 내 문제가 너무 분명해 보인다! – Stomp
@Josh : Regex 엔진은 공통 접두어와 일치하지 않는 많은 수표를 버리는 등 많은 경우에 최적화를 할 수 있습니다. 예를 들어, 첫 번째 문자가 "i"가 아닌 경우 "i"로 시작하는 분기가 확인되지 않습니다. .NET 엔진이이 작업을 수행하는지 확신 할 수는 없지만 그렇게하지 않으면 놀랄 것입니다. –