正则表达式<(。*?)>返回<或>

时间:2018-12-04 23:11:39

标签: c regex

我试图运行一个正则表达式以从包含在“ <”和“>”之间的文件中提取任何字符的字符串。我想出的正则表达式是

[ <(.*?)>]

但是,当我使用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 :(得分:2)

因为scanf系列的格式字符串不是正则表达式,并且我认为您的正则表达式不起作用(您可以使用在线正则表达式测试)。

您可以尝试

fscanf(filename, "<%254[^>]>", word) == 1