我正在尝试使用 POSIX 来匹配正则表达式(不幸的是我无法使用 pcre)。但是,当我在想要捕获的子字符串两边加上括号时,程序会尝试匹配括号。 我怎样才能捕获我想要的实际子字符串
这是我的代码
recomp(®ex_withdraw, "^withdraw ([0-9]+)$", 0);
if(regex(®ex_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(®ex_withdraw, "^withdraw \([0-9]+\)$", 0);
按照回复的建议,但程序仍然遇到相同的行为
最佳答案
POSIX 基本正则表达式使用 \(
...\)
作为捕获组,未转义的括号按字面匹配 - 基本上与 PCRE 和 EXTENDED 正则表达式相反的行为。
请注意,为了将 \
字符放入 C 字符串文字中,需要使用 \
对其进行转义。因此,在 (
和 )
之前添加 \\
就可以了。
关于c - 为什么C与正则表达式匹配时不捕获任何子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815734/