我需要解析很多文件名(我猜最多 250000 个),包括路径,并从中提取一些部分。
这是一个例子:
原来的:/my/complete/path/to/80/01/a9/1d.pdf
需要:8001a91d
我正在寻找的“模式”总是以“/8”开头。我需要从 8 个十六进制数字字符串中提取的部分。
我的想法如下(简化为演示):
/* original argument */
char *path = "/my/complete/path/to/80/01/a9/1d.pdf";
/* pointer to substring */
char *begin = NULL;
/* final char array to be build */
char *hex = (char*)malloc(9);
/* find "pattern" */
begin = strstr(path, "/8");
if(begin == NULL)
return 1;
/* jump to first needed character */
begin++;
/* copy the needed characters to target char array */
strncpy(hex, begin, 2);
strncpy(hex+2, begin+3, 2);
strncpy(hex+4, begin+6, 2);
strncpy(hex+6, begin+9, 2);
strncpy(hex+8, "\0", 1);
/* print final char array */
printf("%s\n", hex);
这行得通。我只是觉得这不是最聪明的方法。并且可能有一些我自己看不到的陷阱。
那么,有人对这种指针移动方式有什么危险提出建议吗?在您看来会有什么改进?
C 是否提供了这样的功能s|/(8.)/(..)/(..)/(..)\.|\1\2\3\4|
?如果我没记错的话,一些脚本语言有这样的特性;如果你明白我的意思。