c - 通过正则表达式查找 URL

标签 c regex

我正在尝试在字符串数组中查找 URL。

这是我的代码:

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);

但是找不到 URL,有人可以解释一下,错误在哪里吗?

最佳答案

试试这个:

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

说明:

首先,它搜索带有插入符号的行的开头。

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

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

以下部分处理可选文件和目录。在组内,我们想要匹配任意数量的正斜杠、字母、数字、下划线、空格、点或连字符。并指示该组可以根据需要匹配多次,允许多个目录与末尾的文件一起匹配。

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

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

Reference

关于c - 通过正则表达式查找 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32937189/

相关文章:

c++ - 24位音频处理

javascript - 正则表达式对 javascript block 注释执行全局匹配

SQL 查询 : How to check if a particular record had more alphabets than numbers and return that

java - 在 Android ndk 的 C 库中测试异常处理程序

c - AES 加密 - 大文件

C 程序在 EOF 检查时挂起

regex - sed 匹配大括号之间的匹配

php - 替换所有*不*在 "\"标签内的 "<code>"字符

javascript - 从字符串js正则表达式中删除尾随数字

c - 在 Telnet session 中处理转义序列