如何匹配标识符并非全部由数字组成?

时间:2013-09-23 08:27:15

标签: regex antlr matching identifier lexer

我有以下词法分析器:ID : [a-z][a-z0-9_]*;

除了匹配1a222z222等标识符外,它的效果很好,但不是1999等所有数字。

那么,我该怎么办才能解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

你的词法分析器是[a-z][a-z0-9_]*。因此,这将匹配哪个以小写字母开头,后跟零个或多个小写字母或数字或下划线

如果您希望标识符以小写或数字开头但不是所有数字,请尝试

[a-z][a-z0-9_]*;|[0-9]+[a-z_][a-z0-9_]*;  // Updated

所以它有两个部分

  • [a-z][a-z0-9_]*;:匹配以小写
  • 开头
  • [0-9]+[a-z_][a-z0-9_]*;:如果它以数字开头,后面是一个或多个数字,则需要一个字母或下划线,后跟零个或多个字母,数字或下划线。

您可以编写与([a-z]|[0-9]+[a-z_])[a-z0-9_]*;相同的内容。