c++ - 正则表达式适用于 Linux 但不适用于 Solaris

标签 c++ regex linux solaris

我编写了一个 C++ 程序来解析日志文件,这些日志文件写入速度太快以至于任何人都无法读取。 该程序应该找到每一行都包含“WARN”之类的词,但不包含“WARNA”这个词。 正如我所说,它在 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 不需要正则表达式字符串开头的 ^ 或字符串末尾的 $。 但对于 Solaris 的功能来说,这似乎是必要的。

关于c++ - 正则表达式适用于 Linux 但不适用于 Solaris,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28302916/

相关文章:

c - __u8 __s16 等的新版本

c++ - 从 MPL 元函数类创建仿函数

java - 迭代最大化算法

c++ - Openssl需要使用CA捆绑文件(中级证书)

c++ - 检查迭代器是否引用列表中的项目

php - 用于查找有效文件名的正则表达式

regex - Vim 正则表达式范围与当前光标位置

c# - 替换单词,但仅在特定行上

linux - 从 mono linux 运行 bash 管道命令

c++ - linux/solaris 扩展路径 C++