2015-02-03 8 views
1

누구나 읽을 수있는만큼 빨리 작성된 로그 파일을 구문 분석하는 C++ 프로그램을 작성했습니다. 프로그램은 모든 행을 'WARN'과 같은 단어로 찾지 만 'WARNA'는 찾지 않아야합니다. 나는 리눅스에서는 잘 작동하지만 Solaris에서는 제대로 작동하지 않는다고 말했다. 나는 REG_EXTENDED 플래그와 함께 regcomp()을 사용했습니다.정규식은 리눅스에서 작동하지만 Solaris에서는 작동하지 않습니다.

regcomp()은 오류를 발생시키지 않으며 regexec은 1을 반환합니다. (REG_NOMATCH).

나는 regexec()regcomp()을 사용합니다.

내가

은 나 자신에 의해 문제를 해결 리눅스

.*([^A-Za-z1-9]|\s)(error|ERROR|Error|fatal|FATAL|Fatal|excep|EXCEP|Excep|warn|WARN|Warn|problem|PROBLEM|Problem|fail|FAIL|Fail|fault|Fault|FAULT|cannot|Cannot|CanNot|CANNOT|cannot|Cannot|CANNOT|cant|can't|Cant|Can't|unable|Unable|UNABLE|mandatory|Mandatory|MANDATORY|mustnot|Mustnot|MustNot|MUSTNOT|couldnot|Couldnot|CouldNot|COULDNOT|didnot|Didnot|DidNot|DIDNOT|violat|Violat|VIOLAT|damage|Damage|DAMAGE|missing|Missing|notfinish|mandatory|Mandatory|MANDATORY|broken|Broken|BROKEN)([^a-zA-Z1-9]).* 
+1

왜 'boost :: regex'를 사용하지 않을까요? – Slava

+1

어떤 컴파일러를 사용하고 있으며 어떤 버전입니까? – sjdowling

+0

대소 문자없이 "error"를 확인하는 방법이 있어야하므로'error | ERROR | Error'가 필요하지 않습니다. – Almo

답변

0

에서 잘 작동이 정말 긴 정규 표현식을 가지고있다. 문제는 리눅스가 정규 표현식 문자열의 시작 부분에 ^을 필요로하지 않거나 문자열 끝에 $을 필요로하지 않는다는 것입니다. 그러나 솔라리스 기능의 경우에는 필 요합니다.