我写了一个C++程序,它解析的日志文件写得太快,任何人都读不到。
程序应该找到每一行有“warn”这样的单词,而不是“warn a”。
正如我所说,它在linux上运行良好,但在solaris上没有。
我用regcomp()
和REG_EXTENDED
标志。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]).*
最佳答案
我自己解决了这个问题。
问题是Linux不需要regex字符串开头的^
或字符串结尾的$
。
但对于solaris函数来说,这似乎是必要的。
关于c++ - 正则表达式在Linux上有效,但在Solaris上无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28302916/