【问题标题】:Which regular expression can be used to recognize keywords in java?java中可以用哪个正则表达式来识别关键字?
【发布时间】:2014-05-23 06:27:37
【问题描述】:

我想匹配 if、else、new 和..etc 等关键字。请建议一个合适的正则表达式来匹配它们。

我试过了

(((\\s)+(when|then|end|and))+(\\s|$))|rule|if|else|(new+(\\s)) 

但它不能正常工作。

【问题讨论】:

  • 您的尝试取得了多大的进展?为什么要匹配 Java 关键字?
  • 正则表达式无法做到这一点;它需要一个递归下降解析器。
  • 您可以将关键字存储在某个集合中,正则表达式需要一些关键字中缺少的模式
  • 这个问题似乎是题外话,因为它无法回答。
  • @chrylis - 说“这个问题无法回答,因为 5 个人认为它跑题了”会比相反的说法更准确。

标签: java regex keyword


【解决方案1】:

如果您有一个 Java 关键字列表,那么您可以将其转换为与这些关键字匹配的正则表达式(原则上 - 以下内容并不打算用作实际代码,只是为了说明它的工作原理) :

"\\b(?:" + "if" + "|" + "for" + "|" + ... + "|" + "new" + "|" + "static" + ")\\b"

例如,该正则表达式使用word boundary anchors 来确保它与单词knife 中的if 不匹配。

不过,它没有语义概念,因此除非您已经进行了一些解析以将 cmets 或字符串等与源代码的“命令部分”分开,否则您会在不一定匹配的地方找到匹配项被用作关键字。

【讨论】:

  • 这是一个很好的答案。但是如果你要使用它,请确保你完全理解了最后一段。
猜你喜欢
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多