POSIX 正则表达式 - 零个或一个括号表达式匹配?

2023-12-06

我正在尝试使用正则表达式来解析源文件并搜索以“LOG”一词开头的 C 程序中的函数,后面可能会或可能不会出现类 [1248AFM] 中的第二个字符,然后后面跟着一个左括号。这是在 Windows 下使用 mingw 开发的,但最终将使用 gcc 在 Linux 下编译和运行。我使用 Jan Goyvaerts 正则表达式教程作为指南,看起来我所追求的是上面显示的括号表达式的零个或一个匹配。零或一听起来很像问号元字符,但在我的实验中,我还无法让它在括号表达式之后工作。为了说明我想要做什么,我有下面所示的简短程序。理想情况下,我只想在 str1 和 str2 上进行匹配。如果我如图所示编译并运行它,我不会得到任何匹配。如果我省略括号表达式后面的问号,我只会在 str2 上得到匹配,这正是我所期望的。除了问号之外,我还尝试了 {0,1} 形式的区间量词,但也没有成功。除了括号表达式之外,我还应该使用其他东西吗?

Dave

#include <stdio.h>
#include <regex.h>

int main(int argc, char **argv) {
  regex_t regex;
  int rtn = regcomp(&regex, "LOG[1248AFM]?(", 0);
  if (rtn) {
    printf("compile failed\n");
    return(1);
  }
  char *str1 = "  LOG(";
  char *str2 = "  LOGM(";
  char *str3 = "  LOG";
  char *str4 = "  LOGJ(";

  int rtn1 = regexec(&regex, str1, 0, NULL, 0);
  int rtn2 = regexec(&regex, str2, 0, NULL, 0);
  int rtn3 = regexec(&regex, str3, 0, NULL, 0);
  int rtn4 = regexec(&regex, str4, 0, NULL, 0);
  printf("str1: %d\nstr2: %d\nstr3: %d\nstr4: %d\n",
    rtn1, rtn2, rtn3, rtn4);

  return(0);
}

就像卡西米尔和伊波利特所说:你需要逃离?当我发表评论时,我没有注意到这一点。问题是你使用了字符串文字,这意味着你必须转义转义。

EDIT正如用户 kdhp 正确指出的那样:?是基本正则表达式的 Gnu 扩展。但问题仍然是一样的:需要对 C 文字中的转义进行转义。

#include <stdio.h>
#include <regex.h>

int main(int argc, char **argv) {
  regex_t regex;
  // Gnu extension
  // int rtn = regcomp(&regex, "LOG[1248AFM]\\?(",0);
  // Basic regular expression
  int rtn = regcomp(&regex, "LOG[1248AFM]\\{0,1\\}(",0);
  if (rtn) {
    printf("compile failed\n");
    return(1);
  }
  char *str1 = "  LOG(";
  char *str2 = "  LOGM(";
  char *str3 = "  LOG";
  char *str4 = "  LOGJ(";

  int rtn1 = regexec(&regex, str1, 0, NULL, 0);
  int rtn2 = regexec(&regex, str2, 0, NULL, 0);
  int rtn3 = regexec(&regex, str3, 0, NULL, 0);
  int rtn4 = regexec(&regex, str4, 0, NULL, 0);
  printf("str1: %d\nstr2: %d\nstr3: %d\nstr4: %d\n",
    rtn1, rtn2, rtn3, rtn4);

  return(0);
}

Gives

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

POSIX 正则表达式 - 零个或一个括号表达式匹配? 的相关文章

  • 递归显式模板实例化可能吗?

    给定一个类似的模板 template
  • 如何在 C++ 中的嵌套词法作用域可访问的作用域中声明静态信息?

    我想声明范围的标识符 该标识符将用于自动填充最内部范围内任何日志记录语句的字段 它们通常会 但并非总是如此 例如 lambda 使用 引入的块 匹配封闭块的 名称 用法看起来像这样 namespace app LOG CONTEXT app
  • 查找周边上的点来表示边界/形状

    我有一个简单的二维网格 其格式为myGrid x y 我正在尝试找到一种方法来找到所选网格周围的周长 这样我就有了所选网格的形状 这是我的意思的一个例子 这里的想法是找到所有相关的 角点 也就是图像周边的红点 放入一个列表中 这样我就可以从
  • 管理多个解决方案中存在的 C# 项目的 Nuget 包

    我现在正处于这样的阶段重构疯狂一个有很多的大项目遗留和不稳定的模块 我决定拆分解决方案目前 所有项目 大约有 20 个 而且由于下个月肯定会出现单元测试项目 还会有更多 链接在一起 使其更加独立和细化 通过这种方法 有一些模块 例如需要在多
  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • C# 委托实例化与仅传递方法引用 [重复]

    这个问题在这里已经有答案了 我有一个简单的问题 与仅传递函数引用相比 实例化 C 委托有什么优势 我的意思是 Why do Thread t new Thread new ThreadStart SomeObject SomeMethod
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • 如何使用 Regsvr32 注册 .NET COM DLL?

    我有一个使用 COM DLL 的 VB6 应用程序 该DLL是用C 编写的 在 C 项目属性中 我检查了 Register for COM interop 选项 VB6 应用程序在我的开发机器上运行良好 C 代码完全遵循以下格式 CodeP
  • 类型定义存在于两个库中

    我正在使用 NET 4 5 构建 ASP NET Web 窗体网站 错误 The type System ComponentModel DataAnnotations Schema ForeignKeyAttribute exists in
  • 为什么libc中没有gmtime的反函数?

    在 libc 中 有两个函数可以将系统时间转换为日历时间 gmtime and localtime 但只有localtime有反函数 mktime 为什么没有反函数gmtime 如果不应该有 为什么gmtime exists 我发现这段代码
  • DLR 返回类型

    我需要 DLR 的帮助 我正在实现 IDynamicMetaObjectProvider 和 DynamicMetaObject 但在获取预期返回类型时遇到一些问题 我在元对象中覆盖 BindInvokeMember 我可以看到所有参数类型
  • std::make_shared 作为默认参数无法编译

    在 Visual C 2008 和 2010 中 以下代码无法编译并出现以下错误 include
  • 需要帮助将 winform 迁移到 net 5

    我正在将 winform 应用程序从 net core 3 1 移植到 net 5 并收到以下错误 严重性代码 说明 项目文件行抑制状态 错误NETSDK1136 目标平台必须设置为Windows 通常 通过在 TargetFramewor
  • 使用 openssl 库获取 x509 证书哈希

    我目前正在开发一个应用程序 它使用 openssl 库 libcrypto 来生成证书 现在我必须获取现有证书的哈希值 当我使用终端时 我可以使用以下命令生成哈希值 openssl x509 hash in cert pem noout 输
  • 有没有办法对 RichTextBox 的撤消历史进行分组或暂时禁用它?

    我目前正在研究 WPF 中 RichTextBox 内的表格 在 WPF 中 表格没有行和列 只有行 每行都有一定数量的单元格 当用户按下 添加列 按钮时 我的程序会向每一行添加一个新单元格 使用此方法的问题是 在用户添加一列后 如果他们按
  • Parallel ForEach 的本地初始化如何工作?

    我不确定 Parallel ForEach 中本地 init 函数的使用 如 msdn 文章中所述 http msdn microsoft com en us library dd997393 aspx http msdn microsof
  • { Qt5.0.2/QML/QtQuick2.0/C++ } 运行没有错误的示例项目? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的设置是Qt5 0 2 MinGW 32位 我在寻找 Qt5 0 2 QML QtQuick2 0 C 代码项目示例 不是Qt Qu
  • 将 Web 场迁移到 ASP.NET 运行时版本 4,同时保持会话

    我们已将 Web 应用程序从 net 运行时 2 v 3 5 迁移到 net 运行时 4 v 4 5 我有一个部署问题 我们的 sessionstate 服务器是一个 stateserver 并在单独的服务器上运行框架 2 中的 aspne
  • 如何获取打印机设备上下文?

    我在 Windows 上尝试使用以下命令打印增强型图元文件 EMF 播放增强元文件 http msdn microsoft com en us library dd162800 28VS 85 29 aspx 我当前正在使用屏幕上窗口的设备
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • JQuery jquery-1.7.1.min.js live() 不推荐使用 on()

    来自 jQuery 网站 从 jQuery 1 7 开始 live 方法已被弃用 使用 on 来 附加事件处理程序 在 1 7 1 版本中 我尝试将所有 live 更改为 on 但没有成功 有谁知道为什么吗 这就是它的调用方式 这是不起作用
  • Google Android GCM 未注册错误

    我正在使用 Android GCM Push 服务 它在一段时间内工作得很好 但在这段时间里它失败了 这是详细信息 如果我让我的应用程序空闲一段时间 然后服务器突然从 Google GCM 获得 NotRegistered 响应 这很奇怪
  • 回形针在哪里放置丢失的.png 默认图像?

    我在我的应用程序中使用回形针 但我的控制器测试失败 因为 BlogsControllerTest test should update blog Paperclip AdapterRegistry NoHandlerError No han
  • 使用 C# 命令 netsh

    我想创建一个 C 应用程序来创建 WLAN 网络 我目前使用命令提示符使用 netsh 我的应用程序应该通过单击按钮来执行此操作 这是我在管理模式下的命令提示符中使用的命令 netsh wlan set Hostednetwork mode
  • 按组生成排名

    如何根据标记在数据框中创建排名 但排名应根据性别分开 Sl no Name Gender Marks Rank 1 aa Male 77 3 2 bb Female 80 2 3 cc Male 74 4 4 dd Female 72 5
  • 如何在 CollapsingToolbarLayout 中使用 TabLayout 和 Toolbar?

    我正在看克里斯班斯 奶酪广场我试图将带有工具栏的 TabLayout 放入 CollapsingToolbarLayout 中 这是我的代码
  • 如何使用 MVC 3 和 Entity Framework Code First 建立多对多关系的 ModelBind?

    我在 MVC 3 应用程序中遇到了同样的问题 我有一个创建新产品的视图 并且该产品可以分配给一个或多个类别 这是我的 EF Code First 模型类 public class Product public int ProductID g
  • 观察者可以观察到多个可观察对象吗?

    试图找到一个这样的例子 有可能我没有采取正确的方法 或者我的思想过度简化了观察者模式的概念 我想创建一个类来控制来自 Web 服务的消息 并且我希望该类监视许多其他操作的更改 我见过的观察者模式示例表明许多观察者正在观看单个可观察的内容 我
  • 我需要获取 csv 列中的值(分组)计数

    我需要计算第一列的值 这些 ID 可能存在于我收到的任何给定 csv 文件中 也可能不存在 因此 我需要循环遍历 csv 文件 查看第一列 如果不存在 则将其添加到保持数组 PWSs 中 或者如果我已经添加了该保持数组 则增加该保持数组中的
  • OpenCV - NDK 更新后对“cv::CascadeClassifier::detectMultiScale()”的未定义引用

    昨天我将 Android Studio 包含 NDK 更新到版本17 0 4754217从那时起我就无法再运行我的应用程序了 当我尝试在更新后重新运行代码时 它给了我错误ABIs mips64 armeabi mips are not su
  • android 获取文本外观运行时

    我已经重写了 textview 类 并且我想在文本外观很小时执行一些操作 如何检查xml布局文件设置的文本外观 我找到了一个解决方法 private int getTextAppearance AttributeSet attrs int
  • 获取在 page_init 中触发回发的控制

    我有一个包含动态创建的下拉列表的网格视图 当更改下拉值并在网格上进行批量更新 btnUpdate click 时 我必须在页面初始化中创建控件 以便它们可用于视图状态 但是 我还有其他几个按钮也会导致回发 并且我不想在页面初始化中创建控件
  • 在生成语句中格式化日期

    在 Pig 中 我有一个语句 基本上将日期附加到我生成的值中 Data FOREACH Input GENERATE CurrentTime FLATTEN group COUNT guid oas Cnt 输出给了我日期2013 05 2
  • 正则表达式匹配-Java

    我正在从以下格式的文件中获取输入 int1 int2 int3 int4 现在我想在我的Java代码中读取int1 int2 int3和int4 我怎样才能用java中的正则表达式匹配来做到这一点 谢谢 String ints 2 3 4
  • 将服务器日志记录到一个文件,将 SQL 日志记录到另一个文件

    我想使用 Log4J 将所有服务器相 关日志 例如启动和关闭 记录到一个文件 并将所有 Hibernate SQL 相关日志记录到另一个文件 我正在尝试过滤所有不相关的日志以仅查看 SQL 查询 如果有办法实现的话 有什么想法或建议吗 Th
  • 使用 MVC 和 jQuery 进行内联客户端验证

    我设置了一个简单的示例来显示 jquery UI 对话框中的表单 并希望在该表单上启用内联客户端验证 然后我将脚本添加到我的母版页中 assets js jquery 1 4 3 min js gt gt assets js jquery
  • 带有 roboguice 抛出异常的简单 Android 应用程序

    我有一个非常简单的应用程序 可以运行 但是当我添加 roboguice 时 它 会抛出异常 java lang RuntimeException 无法实例化应用程序 com MyFirstApp MyFirstApplication jav
  • 如何将 Roman Nuriks Wizard Pager 审核中的数据放入数据库?

    好吧 我知道以前已经问过这个问题 但问题和答案都对我的情况没有帮助 我需要做的只是从向导末尾的审阅页面获取所有数据并将其放入我的 SQLite 数据库中 以便我将来可以在我的应用程序中使用它 我什至不确定在这种情况下我应该上哪门课 我真的希
  • Android无法从ListView Row中按钮的onClick中找到方法

    我有一个从自定义适配器填充的 ListView 每行有 1 个按钮 在 xml 中 按钮已传递 onClick 属性 我只有 xml 没有设置任何 OnClickListeners 另请注意 public void myMethod Vie
  • POSIX 正则表达式 - 零个或一个括号表达式匹配?

    我正在尝试使用正则表达式来解析源文件并搜索以 LOG 一词开头的 C 程序中的函数 后面可能会或可能不会出现类 1248AFM 中的第二个字符 然后后面跟着一个左括号 这是在 Windows 下使用 mingw 开发的 但最终将使用 gcc