首页 > 解决方案 > Flex 正则表达式

问题描述

我无法弄清楚以下表达式是什么意思?

我知道 flex 中正则表达式的语法基础知识,并试图弄清楚正则表达式的含义,但不能。我已经尝试了 3 个小时。

%%
"/*".*"*/" {int i = 0;
while (yytext[i]!='\0') {
if(yytext[i]=='\n')
{
lineno++;
colno=1;
}
else
colno++;
i++;
}
}
"//".*"\n" { lineno++; colno=1;}
(\"(.)*\") {colno+=strlen(yytext);}
(\'(.)\') {colno+=strlen(yytext);}

我的问题是告诉我代码中这四个正则表达式的含义

标签: regexflex-lexer

解决方案


.*(或(.)*,含义相同)匹配除换行符以外的最长字符序列。Flex 允许您通过将字符放在双引号 ( "//") 中或使用反斜杠 ( \") 来引用字符。所以这四种模式匹配当前行中由字符组成的最长序列

  1. /*高达*/

  2. //到行尾

  3. "高达"

  4. '上到`'`。

只有第二个会按预期工作。如果同一行有两个匹配项,则其他所有项都将匹配太多,而第一个将不匹配多行注释。

除了基础知识之外,没有太多可以灵活调整的模式。所有模式语法都在flex 手册的一个非常短的章节中描述。


推荐阅读