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 正则表达式 - 零个或一个括号表达式匹配? 的相关文章

随机推荐

  • 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