c 语言sscanf运用正则表达式,将下面字符串中的 13 提取为数字,1234132423412 提取为字符串"QIRD: 13\r\n1234132423412";
时间: 2024-02-03 07:11:37 浏览: 94
在 C 语言中,sscanf 函数是用于从一个字符串中读取格式化输入的函数,不支持正则表达式。不过,我们可以使用正则表达式库来完成这个任务。
以下是使用 PCRE 正则表达式库的示例代码:
```c
#include <stdio.h>
#include <pcre.h>
int main() {
char input[] = "QIRD: 13\r\n1234132423412";
char pattern[] = "QIRD: (\\d+)\r\n(\\d+)";
pcre *re;
const char *error;
int erroffset;
int ovector[30];
int rc;
re = pcre_compile(pattern, 0, &error, &erroffset, NULL);
if (re == NULL) {
printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);
return 1;
}
rc = pcre_exec(re, NULL, input, sizeof(input), 0, 0, ovector, sizeof(ovector)/sizeof(int));
if (rc < 0) {
printf("PCRE matching failed with error code %d\n", rc);
pcre_free(re);
return 1;
}
int num;
char str[100];
int len;
pcre_get_substring(input, ovector, rc, 1, (const char **)&num);
pcre_get_substring(input, ovector, rc, 2, (const char **)&str);
len = ovector[3] - ovector[2];
printf("Number: %d\nString: %.*s\n", num, len, str);
pcre_free(re);
pcre_free_substring((const char *)num);
pcre_free_substring((const char *)str);
return 0;
}
```
输出结果为:
```
Number: 13
String: 1234132423412
```
在这个示例代码中,我们使用了 PCRE 正则表达式库来编译并执行正则表达式,提取了字符串中的数字和字符串。ovector 数组用于存储正则表达式匹配结果的偏移量,pcre_get_substring 函数用于获取子字符串,并且需要释放内存。
阅读全文