C SLRE正则表达式库不起作用

时间:2014-06-19 00:21:52

标签: c regex

我在C中编写程序,使用SLRE正则表达式从HTML页面捕获字符串,但它不起作用。

根据SLRE documentationslre_match如果匹配则返回大于或等于0的int。 在我的情况下,根据返回值存在匹配,但捕获(slre_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]

     

[首场比赛时长:3077990064]

     

[First Match Pointer:3220110200]

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

这是HTML页面:http://www.gametracker.com/search/sof2/?searchipp=50&searchpge=1

1 个答案:

答案 0 :(得分:1)

该库不支持[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])"也可以。

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