正则表达式:我无法创建匹配关键字的正则表达式?

时间:2013-11-09 18:23:17

标签: java regex

我是regex的新手,我创建了Regex来匹配Number,Operation和Identifier,但我无法管理如何识别下一个令牌是一种语言关键字,例如:

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, ....


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

2 个答案:

答案 0 :(得分:0)

你的模式应该是:

"(int|double|public|...and so on)"
没有什么花哨的

答案 1 :(得分:0)

(?!int)(?!double)([a-z0-9]+)

将与ntblah和itblah以及dblah匹配,但不会与intblah和doubleblah相匹配

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