正则表达式:在冒号之前和之后分隔单词

时间:2013-03-19 00:40:41

标签: regex unix flex-lexer

在这里的一行:

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

2 个答案:

答案 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>>