我试图在字符串数组中找到网址。
这是我的代码:
if((reti = regcomp(®, "/^(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?$/", 0)) == 0)
{
for(i = 0; i < argc; ++i)
{
cout << argv[i] << endl;
cout << "lllll" << endl;
reti = regexec(®, argv[i], 0, NULL, 0);
if(!reti)
{
regfree(®);
return static_cast<string>(argv[i]);
}
}
}else
{
cerr << "Cannot compile regex" << endl;
exit(1);
}
regfree(®);
但它无法找到网址,任何人都可以解释一下,哪里有错误?
答案 0 :(得分:1)
试试这个:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
说明:
首先,它使用插入符号搜索行的开头。
第一个捕获组允许URL以“http://”,“https://”开头,或者都不是。 s
后面的问号允许包含http或https的网址。为了使整个组成为可选组,最后还有一个问号。
接下来是域名:一个或多个数字,字母,点或连字符,后跟另一个点,然后是两到六个字母或点。
以下部分处理可选文件和目录。在组内部,我们希望匹配任意数量的正斜杠,字母,数字,下划线,空格,点或连字符。并指出该组可以根据需要进行多次匹配,允许多个目录与最后的文件匹配。
我使用的是星号而不是问号,因为星号表示零或更多,而不是零或一。如果要在那里使用问号,则只能匹配一个文件/目录。
然后匹配一个尾部斜杠,但它可以是可选的。最后,我们以行尾结束。