LINUX.ORG.RU

scanf очень сложная строка для разбора

 ,


0

1

есть текст строки идут подряд

            1.2.3(1234.5678*sometext)
            1.2.3(1234.5678)
            0-0:1.2.3(1234.5678*sometext)
            0-0:1.2.3(1234.5678)
            1-0:1.2.3(1234.5678)
            0-1:1.2.3(1234.5678)
            1-1:1.2.3(1234.5678)

нужно «отловить» 1.2.3 и 1234.5678

все попытки тщетны, прошу помочь м.б. регулярным выражением?



Последнее исправление: cetjs2 (всего исправлений: 2)

Я может что-то не понимаю, но почему нельзя пройтись по входному потоку getchar() и отлавливать нужное попутно с помощью strcmp() до EOF?

z00ke
()
Ответ на: комментарий от z00ke

у меня получилось в несколько приёмов сделать выглядит уродски, «поиск в найденом», думал есть верный способ это сделать регуляркой что то типа

sscanf(buf,"%[^1.2.3(]1.2.3(%lf".....

я наверное так и реализую, как вы и предлагаете.

sadavod
() автор топика
Ответ на: комментарий от z00ke

да был тут, но т.к. выражение не имеет одинакового начала и конца, поэтому и не получается

sadavod
() автор топика
Ответ на: комментарий от johnson102

ну или без pcre - как было выше замечено, getchar и strncmp. Я бы так и сделал.

johnson102
()

Не понял, что нужно.

Так?:

char buf[128];
if (scanf("1.2.3(1234.5678%s)", buf) == 1)
    printf("hoy!\n");

Или так?:

    char buf[128];
    int v[3];
    double s;
    if (scanf("%d.%d.%d(%lf%s)", v, v+1, v+2, &s, buf) == 5) {
        printf("hoy: %d.%d.%d -> %lf\n", v[0], v[1], v[2], s);
    }
user_2190
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.