0

在这里的行中:

Category Shoes brand:char[30];cost:float;years:int

我正在尝试编写两个单独的正则表达式:一个用于分隔将出现在冒号之前的标签,另一个用于将冒号之后的表达式直到下一个分号或行尾。

到目前为止,我想出了

a.) [^:]+对于第一种情况

b.)[\:...\;]对于第二种情况

我的 Flex 文件内容如下:

%%
[^:]+     { printf("\nLabel: %s\n",yytext); }
[\:...\;] { printf("\nType: %s\n",yytext); }
%%

但是,输出如下:

Label: char
Category Shoes brand

Type: :

Label: char[30];cost

Type: :

Label: float;years

Type: :

关于我将如何解决这个问题的任何输入都会很棒。

编辑:

预期输出:

    Label: brand

    Type: char[30]

    Label: cost

    Type: float

    Label: years

    Type: Float
4

2 回答 2

1
%%

[a-zA-Z0-9]+:   { printf("Label: <<%s>>\n", yytext); }
[a-zA-Z0-9]+    { printf("Word:  <<%s>>\n", yytext); }
[^:\;]+\;       { printf("Type:  <<%s>>\n", yytext); }
.               { printf("Skip:  <<%s>>\n", yytext); }

%%

示例输出(用于您的示例输入):

Word:  <<Category>>
Skip:  << >>
Word:  <<Shoes>>
Skip:  << >>
Label: <<brand:>>
Type:  <<char[30];>>
Label: <<cost:>>
Type:  <<float;>>
Label: <<years:>>
Word:  <<int>>
于 2013-03-19T09:42:54.090 回答
1

查看flex 手册以更好地理解 flex 模式。我相信下面的代码可以满足您的预期。(未经测试)

%x INTYPE
h
[a-z]*`:` { printf("\nLabel: %s\n",yytext); BEGIN(INTYPE); }

<INTYPE>{
    ; { BEGIN(INITIAL); }
    [a-z"[""]"0-9]* {printf("\ntype: %s\n",yytext); } 
}
于 2013-03-19T09:00:44.700 回答