From 8cca2f849bb65c2580c75171876798bc18ff440c Mon Sep 17 00:00:00 2001 From: yangwentong <425822674@qq.com> Date: Sun, 30 Oct 2022 21:58:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=98=E5=8C=96Set::Match,=20=E6=8A=8A?= =?UTF-8?q?=E5=A4=84=E7=90=86=E7=9A=84=E8=BF=87=E7=A8=8B=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E5=88=B0=E4=BA=86Set::Add=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- re2/set.cc | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/re2/set.cc b/re2/set.cc index 45be1ef..256b5c9 100644 --- a/re2/set.cc +++ b/re2/set.cc @@ -63,10 +63,15 @@ namespace re2 int RE2::Set::Add(const StringPiece &pattern, std::string *error) { int place_num = size_; - const char *rure_str = pattern.data(); + std::string rure_pattern = pattern.as_string(); + if(anchor_ == RE2::ANCHOR_START){ // 处理RE2::ANCHOR_START的情况 + rure_pattern.insert(0, "^"); + } else if(anchor_ == RE2::ANCHOR_BOTH) { // 处理RE2::ANCHOR_BOTH的情况 + rure_pattern.insert(0, "^"); + rure_pattern.append("$"); + } rure_error *err = rure_error_new(); - rure *re = rure_compile((const uint8_t *)rure_str, strlen(rure_str), RURE_DEFAULT_FLAGS, NULL, err); - + rure *re = rure_compile((const uint8_t *)rure_pattern.c_str(), strlen(rure_pattern.c_str()), RURE_DEFAULT_FLAGS, NULL, err); if (re == NULL) { const char *msg = rure_error_message(err); @@ -167,14 +172,7 @@ namespace re2 if(matches[i]) { std::string rure_pattern = elem_[i].first; - // 处理RE2::ANCHOR_START的情况 - if(anchor_ == RE2::ANCHOR_START){ - rure_pattern.insert(0, "^"); - } else { // 处理RE2::ANCHOR_BOTH的情况 - rure_pattern.insert(0, "^"); - rure_pattern.append("$"); - } - rure *re = rure_compile_must(rure_pattern.c_str()); + rure *re = (rure *)elem_[i].second; bool result = rure_is_match(re, (const uint8_t *)pat_str, strlen(pat_str), 0); if(result) { -- Gitee From 539df13550fc080b6a6f72c44461ef15fc912033 Mon Sep 17 00:00:00 2001 From: yangwentong <425822674@qq.com> Date: Sun, 30 Oct 2022 22:38:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96Set::Match=E5=AF=B9RE2::A?= =?UTF-8?q?NCHOR=5FSTART=E5=92=8CRE2::ANCHOR=5FBOTH=E7=9A=84=E6=83=85?= =?UTF-8?q?=E5=86=B5=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- re2/set.cc | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/re2/set.cc b/re2/set.cc index 256b5c9..eccca67 100644 --- a/re2/set.cc +++ b/re2/set.cc @@ -137,7 +137,6 @@ namespace re2 const char *pat_str = text.data(); size_t length = strlen(pat_str); - if(anchor_ == RE2::UNANCHORED) { if(v == NULL) @@ -162,23 +161,16 @@ namespace re2 } else { - bool matches[elem_.size()]; - bool result = rure_set_matches((rure_set *)prog_.get(), - (const uint8_t *)pat_str, length, 0, matches); - if(!result) return false; if(v != NULL) v->clear(); for(size_t i = 0; i < elem_.size(); i++) { - if(matches[i]) + std::string rure_pattern = elem_[i].first; + rure *re = (rure *)elem_[i].second; + bool result = rure_is_match(re, (const uint8_t *)pat_str, strlen(pat_str), 0); + if(result) { - std::string rure_pattern = elem_[i].first; - rure *re = (rure *)elem_[i].second; - bool result = rure_is_match(re, (const uint8_t *)pat_str, strlen(pat_str), 0); - if(result) - { - if(v) v->push_back(i); // v不空的情形,把索引加入到v中 - else return true; // v为NULL, 直接返回匹配成功的情形 - } + if(v) v->push_back(i); // v不空的情形,把索引加入到v中 + else return true; // v为NULL, 直接返回匹配成功的情形 } } if(v == NULL) return false; // v为空的情况 -- Gitee