C&C的strtok功能是否支持正则表达式?

时间:2016-01-12 14:27:53

标签: c

让我们说我必须解析一些可能有不同分隔符的电话号码。

示例:01/555555 01 / 555-5555

我可以在c中使用strtok()并将正则表达式作为包含所有不同可能分隔符的分隔符参数吗?

2 个答案:

答案 0 :(得分:1)

不,它不支持正则表达式。在询问前阅读文档。另一方面,这正是它的工作原理Read the documentation,即你给它所有可能的分隔符。

在此处查看

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

int
main(void)
{
    char example[] = "exa$mple@str#ing";
    char *token;
    char *pointer;
    pointer = example;
    token = strtok(pointer, "@#$");
    if (token == NULL)
        return -1;
    do
    {
        fprintf(stdout, "%s\n", token);
        pointer = NULL;
    } while ((token = strtok(NULL, "@#$")) != NULL);

}

答案 1 :(得分:0)

作为iharob答案的补充,sscanf有时可能是strtok的替代品。以下是给出示例的说明:

#include <stdio.h>

int main(void) {
    const char *s = "01/555555 01/555-5555";
    int a, b, c, d, e;

    int ret = sscanf(s, "%02d/%d %02d/%d-%d", &a, &b, &c, &d, &e);
    if (ret != 5) {
        printf("The string is in bad format.\n");
    } else {
        printf("%02d/%d %02d/%d-%d\n", a, b, c, d, e);
    }

    return 0;
}

strtok类似,它不支持正则表达式,但它可以在一行内提取数据。它的工作原理与scanf完全相同,但它从给定的字符串读取,而不是从标准输入读取。

http://linux.die.net/man/3/sscanf