当前位置: 首页 > news >正文

[RE2] docs | FullMatch PartialMatch | 自动匹配

链接:re2/README.md at main · google/re2

docs:RE2正则表达式引擎

RE2是一个高性能的C++库,用于正则表达式匹配

它接收正则表达式模式,将其解析为符号化表示(Regexp),然后**编译**成可执行程序(Prog)。

该程序随后由各种优化匹配引擎(如DFA和NFA)执行,以快速安全地在文本中查找模式。

可视化

在这里插入图片描述

模块

  1. RE2 (高级API接口)
  2. Regexp (正则表达式对象)
  3. Prog (编译后的程序)
  4. DFA (确定性有限自动机引擎)
  5. NFA (非确定性有限自动机引擎)
  6. CharClass (字符类表示)

第1章:RE2(API)

欢迎来到re2

在第一章中,我们将深入探索re2库的核心:RE2类。

你可以把RE2视为C++中处理正则表达式的全能工具,它封装了所有底层复杂性,让你能专注于快速准确地完成模式匹配。

RE2解决什么问题?

假设你有一堆文本,需要从中提取特定模式(如电话号码、电子邮件或日期)。正则表达式(简称"regex"或"regexp")是描述这类模式的强大工具。例如电话号码"650-253-0001"的模式可表示为:(\d+)-(\d+)-(\d+)。而RE2类正是帮助你在C++中实现这种模式匹配的桥梁。

RE2类提供三大核心功能:

  1. 定义模式:将正则表达式字符串转换为可执行格式
  2. 执行匹配:检查文本是否符合模式
  3. 提取信息:获取匹配文本的特定部分(如电话号码中的区号)

快速入门:编译模式

使用正则表达式前需要先"编译"模式字符串,这类似于将菜谱转化为计算机可执行的指令:

#include "re2/re2.h"
#include <iostream>int main() {// 1. 定义正则表达式模式RE2 phone_pattern("(\\d+)-(\\d+)-(\\d+)");// 检查编译是否成功if (!phone_pattern.ok()) {std::cerr << "正则表达式编译错误: " << phone_pattern.error() << std::endl;return 1;}std::cout << "模式编译成功!" << std::endl;return 0;
}

执行匹配与数据提取

RE2提供两种主要匹配方法:

  • RE2::FullMatch:完全匹配
  • RE2::PartialMatch:部分匹配

电话号码提取示例:

#include "re2/re2.h"
#include <iostream>
#include <string>int main() {RE2 phone_pattern("(\\d+)-(\\d+)-(\\d+)");std::string text = "650-253-0001";std::string area_code, prefix, line_number;if (RE2::FullMatch(text, phone_pattern, &area_code, &prefix, &line_number)) {std::cout << "匹配成功!完整号码: " << text << std::endl;std::cout << "  区号: " << area_code << std::endl;    // 输出: 650std::cout << "  前缀: " << prefix << std::endl;      // 输出: 253std::cout << "  线路号: " << line_number << std::endl; // 输出: 0001}// 部分匹配示例std::string long_text = "联系电话:650-253-0001或408-123-4567";std::string found_number;if (RE2::PartialMatch(long_text, phone_pattern, &found_number)) {std::cout << "\n在文本中发现号码: \"" << long_text << "\"" << std::endl;std::cout << "  首个号码(区号): " << found_number << std::endl; }return 0;
}

RE2内部工作机制

RE2类作为协调者,将任务分发给专门的内核模块:

在这里插入图片描述

核心组件包括:

  1. Regexp:语法解析器
  2. Prog:模式编译器
  3. 匹配引擎:DFA/NFA等实际执行者

脑中对这四行代码留下印象,基本上就掌握调用啦

	RE2 phone_pattern("(\\d+)-(\\d+)-(\\d+)");std::string text = "650-253-0001";std::string area_code, prefix, line_number;//callif (RE2::FullMatch(text, phone_pattern, &area_code, &prefix, &line_number))

代码实现

初始化流程(简化自re2/re2.cc):

void RE2::Init(absl::string_view pattern, const Options& options) {// 语法解析entire_regexp_ = Regexp::Parse(pattern, options.ParseFlags(), &status);// 模式编译prog_ = entire_regexp_->CompileToProg(options.max_mem() * 2 / 3);
}

匹配引擎选择逻辑:

bool RE2::Match(...) const {// 根据模式特性选择最优引擎if (can_one_pass && anchor != Prog::kUnanchored) {prog_->SearchOnePass(...);} else if (can_bit_state...) {prog_->SearchBitState(...);} else {prog_->SearchNFA(...);}
}

总结

RE2类作为高级接口:

  • 封装了正则表达式的完整生命周期
  • 自动选择最优匹配策略
  • 提供简洁易用的API接口

下一章:Regexp(正则表达式对象)

http://www.dtcms.com/a/575453.html

相关文章:

  • wordpress评测网站做黄金的分析师网站
  • 信阳市网站建设公司东莞企业推广网站
  • 怎样自己建个人网站wordpress文章自适应图片大小
  • 旅游网站首页图片重装电脑后没有wordpress
  • 公司专业做网站唐山网站建设zzvg
  • 建设服装网站的意义微信公众平台小程序管理
  • 北京市建设厅官方网站萧山建设银行招聘网站
  • PK10如何自己做网站做一个app开发多少钱
  • 网站流量下降管理咨询公司好不好做
  • 网络培训网站开发文献综述网页升级紧急通知域名
  • 全屏网站沈阳网势科技有限公司怎么样
  • 光触媒网站建设wordpress4.7.0下载
  • 珠海网络公司网站建设潍坊网络科技有限公司
  • 做资讯的网站黄页网怎么样
  • 网站建设优化保定织梦网站代码
  • 网站空间地址wordpress爬取豆瓣电影简介
  • 贵州网站建设推荐wordpress自带重定向
  • 【计算机软件资格考试】软考综合知识题高频考题及答案解析5
  • 网站icp备案信息是什么意思2023前端开发的就业现状
  • 网站开发包括除了亚马逊还有啥网站做海淘
  • 做推广哪个网站好手机移动网站设计
  • 手机网站建设设计建设银行武威分行网站
  • 郑州专业网站制作费用报价怎样下载做网站的软件
  • 做电影网站的软件百度做网站效果怎么样
  • 深圳系统网站开发网站设计制作从哪
  • 济南建设网站的公司wordpress响应
  • 微信清粉网站开发3g 手机网站
  • 【Android】正式打包 Release 发布版本(创建秘钥,配置秘钥,打包签名)
  • 质量基础设施一站式服务工作站制作一般网站
  • 做网站的工作流程夫唯老师seo