通过正则表达式查找URL

时间:2015-10-04 18:59:35

标签: c regex

我试图在字符串数组中找到网址。

这是我的代码:

if((reti = regcomp(&reg, "/^(https?:\/\/)?([\w\.]+)\.([a-z]{2,6}\.?)(\/[\w\.]*)*\/?$/", 0)) == 0)
{
    for(i = 0; i < argc; ++i)
    {
        cout << argv[i] << endl;
        cout << "lllll" << endl;
        reti = regexec(&reg, argv[i], 0, NULL, 0);
        if(!reti)
        {
            regfree(&reg);
            return static_cast<string>(argv[i]);
        }

    }


}else
{

    cerr << "Cannot compile regex" << endl;
    exit(1);
}
regfree(&reg);

但它无法找到网址,任何人都可以解释一下,哪里有错误?

1 个答案:

答案 0 :(得分:1)

试试这个:

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

说明:

首先,它使用插入符号搜索行的开头。

第一个捕获组允许URL以“http://”,“https://”开头,或者都不是。 s后面的问号允许包含http或https的网址。为了使整个组成为可选组,最后还有一个问号。

接下来是域名:一个或多个数字,字母,点或连字符,后跟另一个点,然后是两到六个字母或点。

以下部分处理可选文件和目录。在组内部,我们希望匹配任意数量的正斜杠,字母,数字,下划线,空格,点或连字符。并指出该组可以根据需要进行多次匹配,允许多个目录与最后的文件匹配。

我使用的是星号而不是问号,因为星号表示零或更多,而不是零或一。如果要在那里使用问号,则只能匹配一个文件/目录。

然后匹配一个尾部斜杠,但它可以是可选的。最后,我们以行尾结束。

Reference