From 903fcce5c6e2fb0c8a963972f547bbce6b141a58 Mon Sep 17 00:00:00 2001 From: yangwentong <425822674@qq.com> Date: Mon, 12 Sep 2022 21:35:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=AF=B9filtered=5Fre2?= =?UTF-8?q?=E7=9A=84=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b0d9dcd..09b3700 100644 --- a/Makefile +++ b/Makefile @@ -145,8 +145,7 @@ TESTS=\ obj/test/set_test\ obj/test/re2_test\ obj/test/re2_arg_test\ - - #obj/test/filtered_re2_test\ + obj/test/filtered_re2_test\ # obj/test/charclass_test\ # obj/test/compile_test\ -- Gitee From 24ba3a099044c4b455233a0abf8833cb56fcc67f Mon Sep 17 00:00:00 2001 From: yangwentong <425822674@qq.com> Date: Mon, 12 Sep 2022 21:36:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?filter=E4=B8=AD=E7=9A=84FirstMatch=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- re2/filtered_re2.cc | 46 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/re2/filtered_re2.cc b/re2/filtered_re2.cc index f0218db..c73929a 100644 --- a/re2/filtered_re2.cc +++ b/re2/filtered_re2.cc @@ -469,16 +469,42 @@ int FilteredRE2::FirstMatch(const StringPiece& text, return -1; } std::vector regexps; - // 根据atoms获取regexp - // 注意这里是 - - // for(size_t i = 0; i < atoms.size(); i++){ - // for(size_t j = 0; j < re2_vec_.size(); j++){ - // if(RE2::PartialMatch(atoms[i], re2_vec_[j]->pattern())){ - // regexps.push_back(j); - // } - // } - // } + // 根据atoms索引获取regexp索引的规则 + /* + * 如果没有原子, 那么直接会把re加进去。 + * 如果这个正则表达式有原子,那么要把该正则表达式的所有的原子的索引全加入,这个正则表达式才能加入成功。 + */ + for(size_t i = 0; i < re2_vec_.size(); i++) + { + my_atoms.clear(); + vec_atoms_tmp.clear(); + vec_con.clear(); + atoms_tmp.clear(); + MyCompile(re2_vec_[i]->pattern(), 0, re2_vec_[i]->pattern().size() - 1); + if(my_atoms.size() == 0) + { + regexps.push_back(i); + continue; + } + else + { + for(auto x : my_atoms) + { + int flag = 0; + for(auto y : atoms) + { + if(x == my_atoms[y]) + continue; + else + { + flag = 1; + break; + } + if(flag == 0) regexps.push_back(i); + } + } + } + } for (size_t i = 0; i < regexps.size(); i++) if (RE2::PartialMatch(text, *re2_vec_[regexps[i]])) -- Gitee