我正在用 C 语言编写一个带有 libpcre 的引擎,该引擎过滤(在我的情况下,过滤器接受或拒绝字符串)以下形式的一些日志行:
tok1=foo tok2=bar ... tok3="value with spaces in it" ...
所以,我过滤它们的方法是从用户那里接收一个过滤器字符串,格式如下:
"tok1=regex1 tok2=regex2 tok3!=regex3 ..."
一开始,我的引擎解析这个模式,用 pcre_compile/pcre_study 编译所有找到的正则表达式,并将它们存储到哈希表(或基数)中。
("tok1"->pcre_regex1, "tok2"->pcre_regex2, "tok3"->pcre_regex3)
(顺便说一下,“!=”运算符用于过滤不包含以下正则表达式的行。)
然后,在过滤阶段本身,对于每个日志行,我从头到尾逐个字符地遍历该行,我得到令牌/值对,如果在我的哈希表中存在相对于令牌的正则表达式,则值必须匹配正则表达式 (pcre_exec) 否则该行被拒绝。
它工作正常。
我的问题是:我非常怀疑,但我想知道是否可以编写一个大的正则表达式,将我所有的正则表达式组合起来过滤行,并考虑到可能的双引号:
pcre_exec(my_big_re, NULL, my_whole_log_line, len, 0, 0, NULL, 0)
何,还有一个附属问题:是否可以写任何形式的任何正则表达式的否定?(我也很怀疑)