【发布时间】:2016-03-29 17:15:21
【问题描述】:
例如
int val = 13;
Serial.begin(9600);
val = DigitalWrite(900,HIGH);
我真的很想提取像=和;这样的特殊符号。
我已经能够提取出现在代码中相邻的符号,但我需要所有出现。
我试过[^ "//"A-Za-z\t\n0-9]* 和[\;\=\{\}\,]+。都没有用。
怎么了?
我为我的扫描仪制定了如下规则。(已更改)
分号[;]([\n]|[^ "//"])
赋值 (.)?[=]+
大括号 ([{]|[}])([\n]|[^ "//"])
圆括号(“()”)“”
问题是这样发生的
int val=13; // 它无法识别“=”,因为“val”和“=”是相邻的。我想认出它们是否相邻
serial.read(); // 它无法识别 () 和 ;与单独。如果我添加分号规则和圆括号规则,();被认出来了。
我该如何解决?
【问题讨论】:
-
如果要识别单个字符,请不要使用重复运算符(
*或+)。只需[...]将匹配一个字符。此外,您不需要在字符类中对字符进行反斜杠转义,反斜杠除外。所以[;={},]可以匹配其中一个字符(正如我所说,[;={},]+将匹配任意数量的此类字符,因此它将匹配字符串};作为单个标记。 -
我试过 [;={}] 但有一个警告。 - 找不到正确的匹配我一直在努力划分令牌。例如 int val = 13;案例是成功 int val= 13;案子不成功我怎么能分他们?
-
我认为您需要更多地展示您的扫描仪定义,并更清楚地描述您的要求。
-
我编辑了我的问题。请检查一下 !我真的很想知道我错过了什么。
-
@WonHeeLee 一旦你的问题得到回答,请不要破坏你自己的问题。问题应该是为了后代,并帮助未来的读者。
标签: regex flex-lexer lex