Регулярное выражение <(. *?)> Возвращающее <или> - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь запустить регулярное выражение, чтобы извлечь строку из любых символов из файла, который находится между "<" и ">".Приведенное мной регулярное выражение:

[ <(.*?)>]

Однако, когда я запускаю это регулярное выражение с помощью fscanf, я получаю только «<» или «>» в ​​качестве выходных данных для всего, что содержится в знаках.

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

int next_word(FILE* filename,char word[254])
{
    if (fscanf(filename, "%254[<(.*?)>]", word) == 1)
    {
        printf("%s\n",word);
        return 1;
    }
    else if (fscanf(filename, "%[^a-zA-Z]", word) == 1) { return 1; }
    else if (fscanf(filename, "%254[a-zA-Z]", word) == 1) {return 1; }
    return 0;
}

int main(int argc, char * argv[])
{
    char word[254];
    FILE *infile;

    infile = fopen(argv[2],"r");
    while(1)
    {
        if(next_word(infile,word) == 0)
        {
            break;
        }
    }
}

Мой входной файл выглядит следующим образом:

<test> this is a line <end>

, который дает вывод:

<
>

 <
>

, но должен дать

<test>
<end>

1 Ответ

0 голосов
/ 05 декабря 2018

Поскольку строка формата семейства scanf не является регулярным выражением, и я не думаю, что ваше регулярное выражение будет работать (вы можете использовать онлайн-тестирование регулярного выражения).

Вы можете попробовать

fscanf(filename, "<%254[^>]>", word) == 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...