Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C SLRE正则表达式库不';行不通_C_Regex - Fatal编程技术网

C SLRE正则表达式库不';行不通

C SLRE正则表达式库不';行不通,c,regex,C,Regex,我正在用C编写一个程序,它使用SLREregex从HTML页面捕获字符串,但它不起作用 根据SLRE,SLRE\u match如果存在匹配项,则返回大于或等于0的整数。 在我的例子中,根据返回值存在匹配,但是捕获(slre\u cap)没有任何意义 这就是功能: void GetServers(char* _HTML) { struct slre_cap Matches[1]; int Ret = 0; int HTMLLength = strlen(_HTML);

我正在用C编写一个程序,它使用
SLRE
regex从HTML页面捕获字符串,但它不起作用

根据
SLRE
SLRE\u match
如果存在匹配项,则返回大于或等于0的整数。 在我的例子中,根据返回值存在匹配,但是捕获(
slre\u cap
)没有任何意义

这就是功能:

void GetServers(char* _HTML)
{
    struct slre_cap Matches[1];
    int Ret = 0;
    int HTMLLength = strlen(_HTML);

    Ret = slre_match("[0-9][0-9][0-9][0-9][0-9]", _HTML, HTMLLength, Matches, 1);

    printf("[Ret: %d]\n", Ret);
    printf("[HTMLLength: %u]\n", HTMLLength);
    printf("[First Match Length: %u]\n", Matches[0].len);
    printf("[First Match Pointer: %u]\n", (int)Matches[0].ptr);
}
结果是:

[Ret:1842]

[HTMLLength:170724]

[首场比赛长度:307790064]

[第一个匹配指针:3220110200]

如您所见,
Ret
大于0,这意味着我们有一个匹配项,但第一个匹配项(
Matches[0].len
)的长度大于HTML页面的长度。这怎么可能


这是HTML页面:

库不支持
[0-9]
语法。您必须使用
\d

像这样:

Ret = slre_match("(\\d\\d\\d\\d\\d)", _HTML, HTMLLength, Matches, 1);
显然,使用
“([0-9][0-9][0-9][0-9][0-9][0-9])”
也有效


省略括号(),不会返回错误,但会产生不正确的结果,可能值得报告此问题。

您是否尝试过他们的单元测试?是的,单元测试通过。我认为不支持[0-9];只有[a-z];如果我遗漏了什么,请指出。请尝试使用
\d
(数字)。我非常确定
[0-9]
是受支持的,因为
slre\u match
的返回值是正确的。无论如何,结果与
[a-z]
模式相似。编辑:
\d
也可以。将整个图案用括号括起来解决了问题。谢谢