gpt4 book ai didi

c - 正则表达式检查网址

转载 作者:行者123 更新时间:2023-11-30 21:27:26 24 4
gpt4 key购买 nike

我想使用正则表达式检查这样的 url 并在 C 程序中使用它:

x://username@ip/directory/filename.txt

它可以是主机名而不是ip。 x 可以是 ftp、scp、... 之类的任何内容。

我测试了 [a-z_\-\s0-9\.]+)+\.(txt)$ 的 IP 或主机名部分和文件名,但它不起作用!

请帮助我找到正确的正则表达式。

最佳答案

这可能是您正在寻找的表达式:

^.+://.+@([^/]+)/.*/(.*\\.txt)$

这是我用来测试正则表达式的代码:

#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
#include <string.h>

int main(int argc, char const *argv[])
{
char sir[] = "ftp://username@ip/directory/filename.txt";
char msgbuf[100];
int padding, length;
char buffer[50];

regex_t regex;
int reti;
size_t nmatch = 4;
regmatch_t pmatch[4];

/* Compile regular expression */
reti = regcomp(&regex, "^.+://.+@([^/]+)/.*/(.*\\.txt)$", REG_EXTENDED);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
exit(1);
}

/* Execute regular expression */
reti = regexec(&regex, sir, nmatch, pmatch, 0);
if (!reti)
{
length = strlen(sir);
sprintf(buffer, "%d", length);
padding = strlen(buffer);
padding++;
printf("Index:");
for(int i = 0; i < length; i++)
printf("%*d", padding, i);
printf("\nvalue:");
for(int i = 0; i < length; i++)
printf("%*c", padding, sir[i]);
printf("\n\n");


printf("%d %d\n", pmatch[0].rm_so, pmatch[0].rm_eo);
printf("%d %d\n", pmatch[1].rm_so, pmatch[1].rm_eo);
printf("%d %d\n", pmatch[2].rm_so, pmatch[2].rm_eo);
printf("%d %d\n", pmatch[3].rm_so, pmatch[3].rm_eo);
}
else if (reti == REG_NOMATCH) {
puts("No match");
}
else {
regerror(reti, &regex, msgbuf, sizeof(msgbuf));
fprintf(stderr, "Regex match failed: %s\n", msgbuf);
exit(1);
}

/* Free memory allocated to the pattern buffer by regcomp() */
regfree(&regex);

return 0;
}

这是它给出的输出:

Index:  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
value: f t p : / / u s e r n a m e @ i p / d i r e c t o r y / f i l e n a m e . t x t


0 40
15 17
28 40
-1 -1

它捕获 pmatch[1] 中的 ip 和 pmatch[2] 中的 filename.txt

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com