正则表达式中的正斜杠匹配

时间:2020-01-02 12:46:32

标签: c regex debian posix

我在准备正则表达式表达式,在内部匹配正斜杠('/')时遇到麻烦。

我需要匹配"/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(&regex, "^/.{3}[0-9]", 0);
// here checking compilation result - is OK (it means: equal 0)

/* Execute regular expression */
reti = regexec(&regex, "/ABC5", 0, NULL, 0);
// reti indicates no match!

注意:这是关于Linux(Debian)上的C语言(gcc)。当然,像"^\/.{3}[0-9]"这样的表达式会引起gcc编译警告(未知的转义序列)。

解决方案:,正如@tripleee在其答案中建议的那样,问题不是由斜杠引起的,而是由括号'{''}'引起的,在BRE中是不允许的,但是在ERE中允许。最后我换了一行,然后一切正常。

reti = regcomp(&regex, "^/.{3}[0-9]", REG_EXTENDED);

1 个答案:

答案 0 :(得分:4)

斜杠很好,问题在于{3}是扩展的正则表达式(ERE)语法-您需要传递REG_EXTENDED或使用\{3\}(当然,在C字符串中的那些反斜杠需要加倍)。