我在准备正则表达式表达式,在内部匹配正斜杠('/')时遇到麻烦。
我需要匹配"/ABC6"
之类的字符串(正斜杠,然后是任意3个字符,然后恰好是一位数字)。我尝试使用"^/.{3}[0-9]"
,"^\/.{3}[0-9]"
,"^\\/.{3}[0-9]"
,"^\\\\/.{3}[0-9]"
之类的表达式-但未成功。
我该怎么办?
我的代码:
#include <regex.h>
regex_t regex;
int reti;
/* Compile regular expression */
reti = regcomp(®ex, "^/.{3}[0-9]", 0);
// here checking compilation result - is OK (it means: equal 0)
/* Execute regular expression */
reti = regexec(®ex, "/ABC5", 0, NULL, 0);
// reti indicates no match!
注意:这是关于Linux(Debian)上的C语言(gcc)。当然,像"^\/.{3}[0-9]"
这样的表达式会引起gcc编译警告(未知的转义序列)。
解决方案:,正如@tripleee在其答案中建议的那样,问题不是由斜杠引起的,而是由括号'{'
和'}'
引起的,在BRE中是不允许的,但是在ERE中允许。最后我换了一行,然后一切正常。
reti = regcomp(®ex, "^/.{3}[0-9]", REG_EXTENDED);
答案 0 :(得分:4)
斜杠很好,问题在于{3}
是扩展的正则表达式(ERE)语法-您需要传递REG_EXTENDED
或使用\{3\}
(当然,在C字符串中的那些反斜杠需要加倍)。