我是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, ....
?
如果需要,我会发布该程序的全部代码。
答案 0 :(得分:0)
你的模式应该是:
"(int|double|public|...and so on)"
没有什么花哨的
答案 1 :(得分:0)
(?!int)(?!double)([a-z0-9]+)
将与ntblah和itblah以及dblah匹配,但不会与intblah和doubleblah相匹配
<?>(?!int)表示不匹配以int开头的任何内容。 这将成为您的标识符的正则表达式,只需使用该语法排除所有关键字。