【发布时间】:2025-12-07 04:35:02
【问题描述】:
我对正则表达式有点陌生,我创建了正则表达式来匹配数字、操作和标识符,但我无法管理如何识别下一个标记是语言关键字,例如:
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
诠释身份
NUM... IDENTI
........
如何创建另一个正则表达式来匹配一些关键字,如@987654326@?
如果需要,我会发布这个程序的全部代码。
【问题讨论】:
-
好吧,我猜你只需要在匹配标识符之前匹配关键字。剩下的一切都是标识符。正则表达式本身应该像
\b(int|double|boolean|...)\b一样简单 -
@JohannesH。 : 这个我试过了,还是不行。
-
@JohannesH。现在它正在工作:) 谢谢
-
你的
OPERATION("[*|/|+|-]")应该是OPERATION("[*/+-]") -
因为character class like
[abc]表示(a|b|c)。如果你把|放在里面,你只会让你的班级也接受|文字。另请注意,-通常用于创建类似a-z的范围,并且仅将其视为文字,因为您将其放置在字符类的末尾。通常你需要用 \. 转义它