C regcomp 不编译模式
C regcomp doesn't compile pattern
我想将 base64 字符串与此 ^(?=(.{4})*$)[A-Za-z0-9+/]*={0,2}$
模式匹配。我尝试过不同的模式、标志和其他语言。我无法使用 openssl 之外的第三方库。
#include <stdio.h>
#include <regex.h>
int main()
{
const char *data = "dGVzdHRlc3Q=";
regex_t regex;
int ret = regcomp(®ex, "^(?=(.{4})*$)[A-Za-z0-9+/]*={0,2}$", REG_EXTENDED);
if (ret)
{
printf("Could not compile regex\n");
return 1;
}
ret = regexec(®ex, data, 0, NULL, 0);
if (!ret)
printf("Match\n");
else if (ret == REG_NOMATCH)
printf("No match\n");
regfree(®ex);
return 0;
}
您可以重写正则表达式而不用 POSIX 正则表达式风格不支持的前瞻性。该环视确保字符串由零次或多次出现的任意四个字符组成。通过使用
int ret = regcomp(®ex, "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$", REG_EXTENDED);
你们匹配了相同的字符串。参见C demo online。
详情:
^
- 字符串开头
([A-Za-z0-9+/]{4})*
- 四个 ASCII 字母、数字、+
或 /
字符出现零次或多次
([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?
- 可选出现四个 ASCII letters/digits//
/+
,或三个 ASCII letters/digits//
/ +
然后是单个 =
字符,或者 ASCII letters/digits//
/+
然后是两个 =
字符
$
- 字符串结尾。
我想将 base64 字符串与此 ^(?=(.{4})*$)[A-Za-z0-9+/]*={0,2}$
模式匹配。我尝试过不同的模式、标志和其他语言。我无法使用 openssl 之外的第三方库。
#include <stdio.h>
#include <regex.h>
int main()
{
const char *data = "dGVzdHRlc3Q=";
regex_t regex;
int ret = regcomp(®ex, "^(?=(.{4})*$)[A-Za-z0-9+/]*={0,2}$", REG_EXTENDED);
if (ret)
{
printf("Could not compile regex\n");
return 1;
}
ret = regexec(®ex, data, 0, NULL, 0);
if (!ret)
printf("Match\n");
else if (ret == REG_NOMATCH)
printf("No match\n");
regfree(®ex);
return 0;
}
您可以重写正则表达式而不用 POSIX 正则表达式风格不支持的前瞻性。该环视确保字符串由零次或多次出现的任意四个字符组成。通过使用
int ret = regcomp(®ex, "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$", REG_EXTENDED);
你们匹配了相同的字符串。参见C demo online。 详情:
^
- 字符串开头([A-Za-z0-9+/]{4})*
- 四个 ASCII 字母、数字、+
或/
字符出现零次或多次([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?
- 可选出现四个 ASCII letters/digits//
/+
,或三个 ASCII letters/digits//
/+
然后是单个=
字符,或者 ASCII letters/digits//
/+
然后是两个=
字符$
- 字符串结尾。