我在C中编写程序,使用SLRE
正则表达式从HTML页面捕获字符串,但它不起作用。
根据SLRE
documentation,slre_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
答案 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])"
也可以。
省略方括号(),不会返回错误,但产生的结果不正确,可能值得报告问题。