POSIX 具有扩展语法的正则表达式与应有的位置不匹配
POSIX regular expression with extended syntax not matching where it should
我正在尝试在 C 中使用 POSIX 正则表达式,但它不起作用。这是我的代码:
int regi(char *c, char *e)
{
regex_t regex;
int reti = regcomp(®ex, e, 0);
reti = regexec(®ex, c, 0, NULL, 0);
if(!reti)
return 1;
return 0;
}
int main()
{
char str[5] = {'0','x','2','F'};
if(regi(str, "^(0[xX])[0-9a-fA-F]+"))
// Do stuff
return 0;
}
我在看这里:http://www.peope.net/old/regex.html
这永远不会进入 if 语句。
我从来没有完全掌握正则表达式的不同风格,但我似乎 basic regexes 不知道限定符 +
,只知道 *
.
一种解决方案是使用扩展的正则表达式。您必须在编写正则表达式时指定:
reti = regcomp(®ex, e, REG_EXTENDED);
(我认为 +
可以在基本正则表达式中用 "\{1,\}"
模拟,但那没有用。)
为了使用 +
元字符,您需要告诉 regcomp()
您正在使用 extended POSIX syntax:
int reti = regcomp(®ex, e, REG_EXTENDED);
不过,此代码还有其他几个问题,包括将 const char*
转换为 char*
,以及忽略 regcomp()
的 return 值。
我正在尝试在 C 中使用 POSIX 正则表达式,但它不起作用。这是我的代码:
int regi(char *c, char *e)
{
regex_t regex;
int reti = regcomp(®ex, e, 0);
reti = regexec(®ex, c, 0, NULL, 0);
if(!reti)
return 1;
return 0;
}
int main()
{
char str[5] = {'0','x','2','F'};
if(regi(str, "^(0[xX])[0-9a-fA-F]+"))
// Do stuff
return 0;
}
我在看这里:http://www.peope.net/old/regex.html
这永远不会进入 if 语句。
我从来没有完全掌握正则表达式的不同风格,但我似乎 basic regexes 不知道限定符 +
,只知道 *
.
一种解决方案是使用扩展的正则表达式。您必须在编写正则表达式时指定:
reti = regcomp(®ex, e, REG_EXTENDED);
(我认为 +
可以在基本正则表达式中用 "\{1,\}"
模拟,但那没有用。)
为了使用 +
元字符,您需要告诉 regcomp()
您正在使用 extended POSIX syntax:
int reti = regcomp(®ex, e, REG_EXTENDED);
不过,此代码还有其他几个问题,包括将 const char*
转换为 char*
,以及忽略 regcomp()
的 return 值。