【问题标题】:Regex: I can't create a Regex for matching Keywords?正则表达式:我无法为匹配关键字创建正则表达式?
【发布时间】: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
........

如何创建另一个正则表达式来匹配一些关键字,如@9​​87654326@?


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

【问题讨论】:

  • 好吧,我猜你只需要在匹配标识符之前匹配关键字。剩下的一切都是标识符。正则表达式本身应该像\b(int|double|boolean|...)\b 一样简单
  • @JohannesH。 : 这个我试过了,还是不行。
  • @JohannesH。现在它正在工作:) 谢谢
  • 你的OPERATION("[*|/|+|-]") 应该是OPERATION("[*/+-]")
  • 因为character class like [abc] 表示(a|b|c)。如果你把 | 放在里面,你只会让你的班级也接受 | 文字。另请注意,- 通常用于创建类似a-z 的范围,并且仅将其视为文字,因为您将其放置在字符类的末尾。通常你需要用 \. 转义它

标签: java regex


【解决方案1】:
(?!int)(?!double)([a-z0-9]+)

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

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

【讨论】:

  • 我需要正则表达式的哪一部分?
  • 这是除了 Artur 的回答@Caffè 你用这个做什么?
【解决方案2】:

你的模式应该是:

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

没什么特别的

【讨论】:

  • 是的,只有这样一个简单的事情让我发疯。谢谢:)