2015-02-03 3 views
1

Я написал программу на C++, которая анализирует файлы журнала, которые написаны слишком быстро, так как каждый мог ее прочитать. Программа должна найти каждую строку со словом «WARN», но не слово «WARNA». как я сказал, что он отлично работает на Linux, но не на Solaris. Я использовал regcomp() с флагом REG_EXTENDED.Регулярное выражение работает на Linux, но не на Solaris

regcomp() не выдает ошибки и regexec возвращает 1 (REG_NOMATCH).

Я использую regexec() и regcomp().

меня это очень долго регулярное выражение он прекрасно работает в Linux

.*([^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'. – Almo

ответ

0

Я решил проблему сам. Проблема заключалась в том, что linux не нуждается в ^ в начале строки регулярного выражения или $ в конце строки. Но для функции Solaris это кажется необходимым.