1

我对正则表达式有点陌生,我创建了正则表达式来匹配数字、操作和标识符,但我无法管理如何识别下一个标记是语言关键字,例如:

int or double or public ......

这是我的代码:

enum TokenType{
NUMBER("-?[0-9]+.[0-9]+|-?[0-9]+"),      //int and double
OPERATION("[*|/|+|-]"),                 // arithmetic operations  
WHITESPACE("[ \t\f\r\n]+"),            // white space
IDENTI("[_]*[A-Za-z][A-Za-z0-9]*[[_]*[A-Za-z0-9]*]*"),// string like _string_string_..
//......

这里的问题是每个关键字都int将是一个标识符,例如,如果我们有

public static int NUMBER_OF_STUDENT;

输出:

公共 IDENTI
静态 IDENTI
int IDENTI
NUM... IDENTI
........

如何创建另一个正则表达式来匹配一些关键字,例如int, double, ....


如果需要,我将发布该程序的全部代码。

4

2 回答 2

0

你的模式应该是:

"(int|double|public|...and so on)"

没有什么花哨

于 2013-11-09T18:28:24.890 回答
0
(?!int)(?!double)([a-z0-9]+)

将匹配 ntblah 和 itblah 和 dblah 但不匹配 intblah 和 doubleblah

(?!int) 表示不匹配任何以 int 开头的内容。这将成为您的标识符的正则表达式,只需使用该语法来排除您的所有关键字。

于 2013-11-09T18:44:22.373 回答