diff --git a/README.md b/README.md index c734488e74ff4f6e7df86002c68e6b867d5713f3..dbe91f11ccce0bf6c44c787281ed5b31db4fa18a 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,19 @@ # re2-rust -a compatible RE2 API( -2021-11-01) by calling Rust library [regex](https://github.com/rust-lang/regex) +## re2-rust介绍 +re2-rust是来兼容RE2 API[(version 2021-11-01)](https://github.com/google/re2/tree/2021-11-01)的项目,通过调用[Rust正则表达式库](https://github.com/rust-lang/regex)进行实现。re2-rust的功能与原本RE2基本保持一致。 +re2-rust保留了re2中的对外的接口,分别在re2.h、set.h和filtered_re2.h中。 +re2.h中的接口可以实现正则表达式的匹配、查找和替换的功能;set.h中的接口可以同时处理多组正则表达式;filtered_re.h中的接口提供了一种预过滤机制,有助于减少需要实际搜索的regexp的数量。这些接口再调用Rust正则库中提供的接口对用户传递过来的数据进行处理,最后再把结果进行返回。 + + +## 编译、安装re2-rust ``` Shell $ git clone https://gitee.com/openeuler/re2-rust.git $ cd re2-rust ``` - -### 编译、安装re2-rust - -使用openEuler 22.03-LTS +**使用openEuler 22.03-LTS** ``` Shell dnf install git @@ -27,7 +29,7 @@ g++ testinstall.cc -o testinstall -lre2 ./testinstall ``` -Ubuntu 20.04 +**使用Ubuntu 20.04** ``` Shell $ make @@ -37,8 +39,543 @@ $ g++ testinstall.cc -o testinstall -lre2 $ ./testinstall ``` -## Test Rusults +## 性能测试 +RE2-Rust项目中只需要对re2目录下filtered_re2.h、re2.h、set.h文件中声明的部分函数进行性能测试,而filtered_re2.h中的主要函数是通过调用re2.h中的PartialMatch()函数实现的,所以下面只对re2.h和set.h文件中主要函数进行性能测试。相关的性能测试代码详见regexp_benchmark.cc文件。 +re2.h文件中相关函数的性能测试: +我们对re2.h对外接口中的FullMatch()、PartialMatch()、FindAndConsume()三个函数进行了测试,下面表格中的re2-c++和re2-rust分别通过上述三个函数测试了表格中的八个正则表达式,但由于这三个函数的本质是调用了RE2::DoMatch()函数,所以在表格中不对上面三个函数进行区分。下面表格是regexp_benchmark.cc中一些正则表达式在text_re2_1KB.txt文本下的执行时间。 +
+ 正则表达式 +(含义) + |
+
+ RE2-C++ + |
+
+ RE2-Rust + |
+
+ PCRE + |
+
+ Regex + |
+
+
+ 空 + |
+
+ 339 ns/iter + |
+
+ 213 ns/iter + |
+
+ 133 ns/iter + |
+
+ 54 ns/iter + |
+
+ 3019.80 MB/s + |
+
+ 4785.82 MB/s + |
+
+ 7653.53 MB/s + |
+
+ 18890.09 MB/s + |
+ |
+ "abcdefg" +匹配abcdefg字符串 + |
+
+ 820 ns/iter + |
+
+ 259 ns/iter + |
+
+ 1686 ns/iter + |
+
+ 97 ns/iter + |
+
+ 1248.70 MB/s + |
+
+ 3951.78 MB/s + |
+
+ 607.26 MB/s + |
+
+ 10507.00 MB/s + |
+ |
+ "(?-s)^(?:GET|POST) +([^ ]+) + HTTP" +匹配HTTP请求报文格式 + |
+
+ 343 ns/iter + |
+
+ 246 ns/iter + |
+
+ 147 ns/iter + |
+
+ 92 ns/iter + |
+
+ 2982.79 MB/s + |
+
+ 4157.21 MB/s + |
+
+ 6932.47 MB/s + |
+
+ 11096.98 MB/s + |
+ |
+ "(?-s)^(.+)" +匹配行首连续出现一次以上的字符 + |
+
+ 542 ns/iter + |
+
+ 212 ns/iter + |
+
+ 203 ns/iter + |
+
+ 56 ns/iter + |
+
+ 1886.72 MB/s + |
+
+ 4807.80 MB/s + |
+
+ 5031.92 MB/s + |
+
+ 18062.85 MB/s + |
+ |
+ "(?-s)^([ -~]+)") +匹配行首连续出现一次以上的ASCII字符 + |
+
+ 557 ns/iter + |
+
+ 217 ns/iter + |
+
+ 190 ns/iter + |
+
+ 59 ns/iter + |
+
+ 1835.28 MB/s + |
+
+ 4715.87 MB/s + |
+
+ 5365.38 MB/s + |
+
+ 17188.64 MB/s + |
+ |
+ "(?s).*" +匹配任意字符 + |
+
+ 349 ns/iter + |
+
+ 21223 ns/iter + |
+
+ 154 ns/iter + |
+
+ 2588 ns/iter + |
+
+ 2929.63 MB/s + |
+
+ 48.25 MB/s + |
+
+ 6640.02 MB/s + |
+
+ 395.62 MB/s + |
+ |
+ "(?s).*$" +匹配任意字符 + |
+
+ 11401 ns/iter + |
+
+ 19678 ns/iter + |
+
+ 159 ns/iter + |
+
+ 2468 ns/iter + |
+
+ 89.81 MB/s + |
+
+ 52.04 MB/s + |
+
+ 6415.22 MB/s + |
+
+ 414.86 MB/s + |
+ |
+ "(?s)((.*)()()($))" +匹配任意字符 + |
+
+ 11179 ns/iter + |
+
+ 19873 ns/iter + |
+
+ 260 ns/iter + |
+
+ 2488 ns/iter + |
+
+ 91.59 MB/s + |
+
+ 51.53 MB/s + |
+
+ 3937.18 MB/s + |
+
+ 411.54 MB/s + |
+
+ + |
+
+ RE2-C++ + |
+
+ RE2-Rust + |
+
+ Regex + |
+
+ V为空 + |
+
+ 1716 ns/iter + |
+
+ 383 ns/iter + |
+
+ 18 ns/iter + |
+
+ 596.67 MB/s + |
+
+ 2671.52 MB/s + |
+
+ 56944 MB/s + |
+ |
+ V不为空 + |
+
+ 8231 ns/iter + |
+
+ 535 ns/iter + |
+
+ 6686 ns/iter + |
+
+ 124.40 MB/s + |
+
+ 1910.52 MB/s + |
+
+ 153 MB/s + |
+