在这里的一行:
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
答案 0 :(得分:1)
检查flex manual以更好地了解弹性模式。 我相信下面的代码符合您的预期。(未经测试)
%x INTYPE
h
[a-z]*`:` { printf("\nLabel: %s\n",yytext); BEGIN(INTYPE); }
<INTYPE>{
; { BEGIN(INITIAL); }
[a-z"[""]"0-9]* {printf("\ntype: %s\n",yytext); }
}
答案 1 :(得分: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>>