C++ 子模式匹配

2023-11-29

谁能告诉我一个关于在 C/C++ 中使用正则表达式 (regex.h) 来搜索和/或提取正则表达式中的子模式的示例。

在 javascript 中,它会是这样的,

var str = "the string contains 123 dots and 344 chars";
var r = /the string contains ([0-9].*?) dots and ([0-9].*?) chars/;
var res = r.exec(str);
var dots = res[1];
var chars = res[2];
alert('dots ' + dots + ' and chars ' + chars);

我如何使用 c/c++ 中的 regex.h 来做到这一点(不是 boost 或任何其他库)?

thanks,


没有regex.h在标准 C 或标准 C++ 中,所以我假设你的意思是POSIX 正则表达式库。 C 示例:

char const *str = "the string contains 123 dots and 344 chars";
char const *re_str = "the string contains ([0-9].*?) dots and ([0-9].*?) chars";
regex_t compiled;
regmatch_t *groups;

regcomp(&compiled, re_str, REG_EXTENDED);

ngroups = compiled.re_nsub + 1;
groups = malloc(ngroups * sizeof(regmatch_t));
regexec(&compiled, str, ngroups, groups, 0);

for (size_t i = 0; i < ngroups; i++) {
    if (groups[i].rm_so == (size_t)(-1))
        break;
    else {
        size_t len = groups[i].rm_eo - groups[i].rm_so;
        char buf[len + 1];
        memcpy(buf, str + groups[i].rm_so, len);
        buf[len] = '\0';
        puts(buf);
    }
}
free(groups);

(添加您自己的错误检查。有关更多详细信息,请参阅这个答案.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 子模式匹配 的相关文章

随机推荐

  • 我需要 html.Parse() 无法解析的 HTML

    我正在编写一个 Go 函数来读取 HTML 响应正文并提取页面标题 总的来说 该函数工作得很好 但我想测试响应正文根本不是正确 HTML 的代码路径 我为单元测试创 建一些无效 HTML 的简单尝试已经失败 显然 并且根据html Pars
  • 为什么 RenderingContext.drawElements 在绘制之前清除屏幕?

    当 RenderingContext drawElements 在绘制之前清除屏幕时 它是否正确 考虑这些屏幕截图 这些屏幕截图显示了调用 drawElements 的一个步骤 并且已绘制的对象被删除 WebGL 有效地页面合成后清除屏幕
  • SWIFT:CoreLocation - 使用 CLBeaconIdentityConstraint 测距信标不会测距多个信标

    因此 我们在 Swift for iOS 13 中开发时遇到了一个问题 当我们使用较新的方法来测距信标 startRangingBeacons satisfying CLBeaconIdentityConstraint 时 它只会测距最近添
  • 具有 Windows 身份验证的 cx_Oracle

    我想让 cx Oracle 与 Windows 操作系统身份验证一起使用 但惨败 我知道使用 pyodbc 你可以使用trusted connection yes 但我必须使用 Oracle 客户端 11g 12c 它似乎与 pyodbc
  • 多窗口 OpenGL/过剩

    我想知道如何打开多个 OpenGL Glut 窗口 我的意思是同时多个窗口 不是子窗口和 不更新同一个窗口 虽然我相信上面的答案是准确的 但它比需要的要复杂一些 并且当以后必须处理窗口之间的移动时 例如 在窗口中绘制时 可能会很困难 这是我
  • 与基元进行比较 -> Integer / int

    是不是写得比较好 int primitive1 3 primitive2 4 Integer a new Integer primitive1 Integer b new Integer primitive2 int compare a c
  • 如何使用 VS Package 在解决方案资源管理器中获取所选项目的项目类型 Guid

    我创建了简单的 VS 包 用于在解决方案资源管理器的上下文菜单中添加新项目 我需要检查所选项目的项目类型 GUID 我怎样才能得到这个 例如 一个解决方案包含三种不同类型的项目 如 WindowFormsApplication MVC 项目
  • Python文件常见的头格式是什么?

    我在有关 Python 编码指南的文档中发现了以下 Python 源文件的标头格式 usr bin env python Foobar py Description of what foobar does author Barack Oba
  • WebMvcConfigurerAdapter 不起作用

    这是我正在处理的 WebConfig 代码 package hello config import org springframework context annotation Configuration import org spring
  • 删除 NSdictionary 中的重复项

    有没有办法从 NSDictionary 中删除重复的 键值 对 编辑 我的描述具有误导性 我有重复的对 例如键1 值1键1 值1键2 值2键1 值1 etc 反转键值不是一个好主意 因为并非所有值都可以是键 你可以这样做 dict 是原始字
  • Google App Script 中同时多次提交

    我使用 Google App Script 创建了一个表单 并发送了 Google 电子表格中的所有数据 我的 GS 代码 function doGet e return HtmlService createTemplateFromFile
  • 无法远程运行针对 Safari 11 的测试(ssh、CI)

    当我尝试通过 ssh 手动或通过 Jenkins 其中 Safari 所在的机器是远程从机 运行测试时 我在针对 Safari 11 运行 Ruby RSpec 测试时遇到问题 执行测试时 我收到以下错误 Selenium WebDrive
  • Python Flask - request.json 返回 None 类型而不是 json 字典

    我正在编写一个非常简单的演示 web 应用程序 我似乎无法从中传递 json 对象js to python using ajax 我已经尝试了一些有类似问题的人的建议 例如使用 get json 代替 json 传递对象而不使用JSON s
  • 无法使用 SQL 创建具有小数位的数字列

    下面的SQL CREATE TABLE TESTTABLE TESTFIELD dec 6 2 抛出错误 SQL0104 令牌 无效 有效令牌 AS NO FOR NOT FILE WITH CCSID CHECK LOGGED UNIQU
  • 格式化sectionNameKeyPath NSFetchedResultsController - Swift

    我正在尝试格式化我的sectionNameKeyPath对于我的核心数据获取 使用存储的NSDate属性 它正在全面工作 并根据以下内容将记录拉动 排序到各个部分NSDate但我不知道如何格式化它以按 dd mm yyyy 显示它 我知道如
  • CSS 动画、自动幻灯片上的淡入淡出不透明度

    我想制作一个幻灯片 其中图片通过淡入淡出不透明度进行过渡 它只是在屏幕上变暗并切换到下一张图片 我让它工作 但添加了其他浏览器 webkit 它停止工作 似乎找不到我的错误 幻灯片仍然有效 这是代码 Fading animation in
  • 我的 Android Studio 从 3.4 更新到 3.5 后不断崩溃

    从今天起我就一直面临这个问题 昨天我将 Android Studio 从 3 4 更新到 3 5 它运行良好 但从今天开始 它在启动时崩溃 当我启动时 它显示启动屏幕 然后尝试加载项目并突然关闭或崩溃 而不显示任何错误消息 我应该怎么办 是
  • Delphi XE4 - 八进制常数像十进制常数一样工作

    今天我正在对我的队友进行代码审查 它是普通的旧 Delphi 版本 XE4 我检测到这样的代码 cWin CountryIdsSet array 0 243 of integer 499 688 040 它是十进制 ID 列表 但其中之一
  • C- 使用位域时结构的大小以及它如何存储在内存中

    void main struct bitfield signed int a 3 unsigned int b 13 unsigned int c 1 struct bitfield bit1 2 14 1 clrscr printf d
  • C++ 子模式匹配

    谁能告诉我一个关于在 C C 中使用正则表达式 regex h 来搜索和 或提取正则表达式中的子模式的示例 在 javascript 中 它会是这样的 var str the string contains 123 dots and 344