0

ここの行で:

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

私は2つの別々の正規表現を書き込もうとしています。1つはコロンの前に表示されるラベルを区切るためのもので、もう1つはコロンの後から次のセミコロンまたは行末までの式を取得するためのものです。

これまで私は思いついた

a。) [^:]+最初のケースの場合

b。)[\:...\;]2番目のケースの場合

私の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

フレックスパターンの理解を深めるために、フレックスマニュアルを確認してください。以下のコードはあなたが期待したことをしていると思います。(テストされていません)

%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 に答える
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 に答える