我正在尝试在字符串数组中查找 URL。
这是我的代码:
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(®);
但是找不到 URL,有人可以解释一下,错误在哪里吗?
最佳答案
试试这个:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
说明:
首先,它搜索带有插入符号的行的开头。
第一个捕获组允许 URL 以“http://”、“https://”或两者都不开头。 s
后面的问号允许包含 http 或 https 的 URL。为了使整个组成为可选的,它的末尾还有一个问号。
接下来是域名:一个或多个数字、字母、点或连字符,后跟另一个点,然后是两到六个字母或点。
以下部分处理可选文件和目录。在组内,我们想要匹配任意数量的正斜杠、字母、数字、下划线、空格、点或连字符。并指示该组可以根据需要匹配多次,允许多个目录与末尾的文件一起匹配。
我使用星号而不是问号,因为星号表示零或多个,而不是零或一。如果此处使用问号,则只能匹配一个文件/目录。
然后匹配尾部斜杠,但它可以是可选的。最后我们以行尾结束。
关于c - 通过正则表达式查找 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32937189/