我试图找到正确的lex正则表达式来查找可以由数字,字符和下划线组成的字符串文字,只要一行中没有两个或更多下划线。即
This__Doesn'tw0rk
This_W1LL_work
到目前为止,我尝试使用
{Letters}(({Letters}|{Digit})*)(_?)({Letters}|{Digit}+)
但由于它只有1个下划线或没有下划线,因此不应该工作。只要不连续,就可以有多个下划线。
{Letters}(({Letters}|{Digit}|_?)*)({Letters}|{Digit})+
由于它可以连续允许多于1个下划线,因此无法正常工作。我一遍又一遍地疯狂阅读(http://dinosaur.compilertools.net/lex/)并试图解决它。
我已经尝试过使用网站上提到的{m,n},但这也不是很好。
任何指针都会很好,我试图弄清楚最后一个问题。
答案 0 :(得分:2)
只需尝试
{Letters}(_?({Letters}|{Digit}))*
这是以字母开头的标记,然后包含零个或多个可选下划线后跟字母或数字的实例。它应该匹配
a
abc
a_b_c
aa_bbbb834758_9zz
无法接受两个连续的下划线,因为每个下划线后面必须跟一个字母或数字。
奖励:你不能以下划线结尾。如果您想允许这样的话,请将_?
添加到最后。