Flex正则表达式

时间:2019-01-15 18:31:37

标签: regex flex-lexer

我不知道下面的表达式是什么意思?

我了解flex中regex的语法基础,并试图弄清regex的含义,但是不能。我已经尝试了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);}

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

1 个答案:

答案 0 :(得分:1)

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

  1. \"/*

  2. */到行尾

  3. //"

  4. "到``'`。

只有第二个可以正常使用。如果同一行上有两个匹配项,则所有其他匹配项都将匹配过多,并且第一个将不匹配多行注释。

除了基础知识以外,没有什么可以改变模式的了。 flex manual的非常短的一章中介绍了所有模式语法。