在C语言中,检查一个字符串中的URL有效性可以通过正则表达式和字符串操作来实现
#include<stdio.h>
#include <stdbool.h>
#include<string.h>
#include<regex.h>
bool is_valid_url(const char *url) {
// 定义一个正则表达式,用于匹配有效的URL
const char *pattern = "^(http|https)://[a-zA-Z0-9-._]+\\.[a-zA-Z]{2,}$";
regex_t regex;
int reti;
char msgbuf[100];
// 编译正则表达式
reti = regcomp(®ex, pattern, REG_EXTENDED);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
return false;
}
// 使用正则表达式匹配URL
reti = regexec(®ex, url, 0, NULL, 0);
if (!reti) {
// 匹配成功,URL有效
regfree(®ex);
return true;
} else if (reti == REG_NOMATCH) {
// 匹配失败,URL无效
regfree(®ex);
return false;
} else {
// 发生错误
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
regfree(®ex);
return false;
}
}
int main() {
const char *url1 = "https://www.example.com";
const char *url2 = "not_a_valid_url";
printf("URL 1: %s, valid: %s\n", url1, is_valid_url(url1) ? "true" : "false");
printf("URL 2: %s, valid: %s\n", url2, is_valid_url(url2) ? "true" : "false");
return 0;
}
这个示例中,我们定义了一个名为is_valid_url
的函数,该函数接受一个字符串参数url
。我们使用正则表达式^(http|https)://[a-zA-Z0-9-._]+\\.[a-zA-Z]{2,}$
来匹配有效的URL。然后,我们使用regcomp
函数编译正则表达式,并使用regexec
函数执行匹配。如果匹配成功,说明URL有效,返回true
;否则,返回false
。
请注意,这个示例仅适用于Linux系统。如果你使用的是Windows系统,你需要包含<windows.h>
头文件,并使用_snprintf
函数替换snprintf
函数。此外,你还需要将REG_EXTENDED
替换为REG_EXTENDED | REG_ICASE
,以便在Windows系统上正确处理大小写敏感的正则表达式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。