c中的regExp:在<n>重复之后匹配一个数字

时间:2016-12-28 02:23:28

标签: c regex match

我有一组以字符串开头的数字,在C:

中的字符串中
intr 250727985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238463729 0 0 0 0 0 8510 1009565 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 75963 0 0 0 0 0 0 0 0 0 0 0 0 0 6416543 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29812 197 0 0 0 0 842664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

我想捕捉(匹配)他们的第26个位置(我回来时所需的匹配:1009565。)

我尝试过这种模式:

(?:[0-9]+[[:space:]]){26}(?<![0-9])

但这是捕获整个字符串直到所需的位置。 如何用C中的RegExp实现这一点?有人可以提供样品来源吗?

RegExp是最快(最轻的系统资源)方式吗?我需要在一秒钟内重复这个操作,所有的正常运行时间。

我对如何做到这一点感到困惑。

2 个答案:

答案 0 :(得分:2)

我认为使用RegExp会使问题更复杂,正如其他人所建议的那样,使用strtok会更容易。

您可以在每个空格处解析字符串,并使用<string.h>中的strcmp匹配您尝试搜索的模式。

以下是您可能想要使用的基本概念:

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

char *string_search(char *string, unsigned position);

int main(void) {
    char string[] = "250727985 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 238463729 0 0 0 0 0 8510 1009565 0 0 0 0 0";
    char *check;
    unsigned position = 26;

    check = string_search(string, position);

    if (check != NULL) {
        printf("String %s found in position %d.\n", check, position);
    } else {
        printf("No string found in position %d.\n", position);
    }

    return 0;
}

char *string_search(char *string, unsigned position) {
    char *number;
    const char *delim = " ";
    unsigned pos_count = 1;

    number = strtok(string, delim);
    while (number != NULL) {
        if (pos_count == position) {
            return number;
        }
        pos_count++;
        number = strtok(NULL, delim);
    }
    return NULL;
}  

答案 1 :(得分:0)

Unix字符串库有strtok,它将字符串分成给定分隔符的标记。你应该能够简单地遍历字符串,直到你到达你想要的位置。

有关strtok的堆叠溢出的讨论位于Using strtok in c,其中包含一些示例代码和问题。