C SLRE正则表达式库不';行不通
我正在用C编写一个程序,它使用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);
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
也可以。将整个图案用括号括起来解决了问题。谢谢