c - 为什么C与正则表达式匹配时不捕获任何子字符串

标签 c regex

我正在尝试使用 POSIX 来匹配正则表达式(不幸的是我无法使用 pcre)。但是,当我在想要捕获的子字符串两边加上括号时,程序会尝试匹配括号。 我怎样才能捕获我想要的实际子字符串

这是我的代码

recomp(&regex_withdraw, "^withdraw ([0-9]+)$", 0);
if(regex(&regex_withdraw, command, 2, groupArray, 0) == 0){
    printf("withdraw %s dollars\n", groupArray[1].rm_eo - groupArray[1].rm_so);
}

上面的代码匹配

withdraw (4)

但不是

withdraw 4

在这两种情况下我都无法真正获得我需要的子字符串(在本例中为 4) 使用 REG_EXTENDED 标志不会改变行为

*编辑

我尝试使用

recomp(&regex_withdraw, "^withdraw \([0-9]+\)$", 0);

按照回复的建议,但程序仍然遇到相同的行为

最佳答案

POSIX 基本正则表达式使用 \(...\) 作为捕获组,未转义的括号按字面匹配 - 基本上与 PCRE 和 EXTENDED 正则表达式相反的行为。

请注意,为了将 \ 字符放入 C 字符串文字中,需要使用 \ 对其进行转义。因此,在 () 之前添加 \\ 就可以了。

关于c - 为什么C与正则表达式匹配时不捕获任何子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815734/

相关文章:

将 IP 或 MAC 地址从字符串转换为字节数组(Arduino 或 C)

c - 链表末尾插入

c - 发送到另一个函数后指针没有得到更新

python - 函数定义上的正则表达式 findall。想要匹配参数但不匹配函数

regex - 在 mac 上用 sed 中的字符串替换换行符

C 编程将字符数组复制到二维字符数组

c - strtok 和段错误的问题

regex - unix 正则表达式中的星号(*) 和点星号(.*)

php - 获取 Twig 模板文件中使用的所有变量

regex - 匹配 X-Forwarded-For header 中的最后一个非私有(private) IP 地址