如何使用Lex Regex检查双下划线

时间:2015-02-08 02:28:48

标签: c regex lex regular-language

我试图找到正确的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},但这也不是很好。

任何指针都会很好,我试图弄清楚最后一个问题。

1 个答案:

答案 0 :(得分:2)

只需尝试

{Letters}(_?({Letters}|{Digit}))*

这是以字母开头的标记,然后包含零个或多个可选下划线后跟字母或数字的实例。它应该匹配

  • a
  • abc
  • a_b_c
  • aa_bbbb834758_9zz

无法接受两个连续的下划线,因为每个下划线后面必须跟一个字母或数字。

奖励:你不能以下划线结尾。如果您想允许这样的话,请将_?添加到最后。