弹性的正则表达式

时间:2014-01-31 19:47:35

标签: c++ c regex flex-lexer

我正在尝试编写这样的flex规则:

%%
[0-9]+                  yylval=atoi(yytext); return NUMBER;
[<]                     return LANGLE;
[/>]                    return CLOSERANGLE;
[>]                     return RANGLE;
[/]                     return SLASH;
[ a-zA-Z0-9]            yylval=strdup(yytext); return ANYTHING;
\n                      /* ignore end of line */;
[ \t]+                  /* ignore whitespace */;
%%

当我针对该文件运行flex程序时,它说:

example4.l:19: warning, rule cannot be matched
example4.l:20: warning, rule cannot be matched

我想这是因为在[/>]规则中,它与/>匹配。但问题是如何编写该规则以使其与/ >匹配?

我尝试了文档:它说:

‘rs’
    the regular expression ‘r’ followed by the regular expression ‘s’; called concatenation

我不是这样做的吗?怎么了?以及如何应对这个问题?

1 个答案:

答案 0 :(得分:1)

  

我想这是因为在规则[/&gt;]中它匹配/或&gt;

完全。

  

但问题是如何编写该规则以使其匹配/和&gt;一起?

"/>"
  

我不是这样做的吗?

没有。 [/]匹配 / [>]匹配&gt; 。所以[/][>]会起作用。但引用的形式更为正常。