首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Regex检测注释/字符串,不发生冲突,方法名称,类名

Regex检测注释/字符串,不发生冲突,方法名称,类名
EN

Stack Overflow用户
提问于 2015-08-14 23:33:05
回答 2查看 225关注 0票数 1

我正在创建一个简单的IDE。

这是通过使用regex检测代码类型并在JTextPane中对它们着色来完成的。

目前,我可以发现:

  • 评论
  • 字符串文字
  • 数字
  • 关键字/限制词

下面是我的程序示例:

问题1:我的正则表达式检测字符串文字,然后是注释。因此,它覆盖了它的颜色,导致字符串中的注释被不正确地着色。

这是用于检测注释的正则表达式:

代码语言:javascript
代码运行次数:0
运行
复制
Pattern commentsSingle = Pattern.compile("\\/\\/.*");
Pattern commentsMulti = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL);

这是用于检测字符串文字的regex:

代码语言:javascript
代码运行次数:0
运行
复制
Pattern strings = Pattern.compile("((?<!\\\\)\\\"(.*?)\\\"(?<!\\\\\\\"))");

是否有一种方式使我的注释regex不会检测到字符串文本(“”双引号)

或者也许

不会检测到内部注释的字符串。

问题2:我希望检测方法名(用户创建的),并将它们着色为不同的颜色.

是否有可以检测方法名称的正则表达式?

问题3:就像Q2一样,我希望检测类名并给它们涂上不同的颜色。

是否有可以检测类名的正则表达式?

--

很抱歉,我的长期职位,我是相对较新的regex和任何帮助,将非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2015-08-14 23:43:52

专业提示:你做错了。

编程语言中有太多复杂的结构,无法用regex来解释。即使语言相当简单,正则表达式也会很快变得过于笨重,无法维护和更新。不仅如此,正则表达式也很快开始在大型数据集中缓慢运行。

你最好的选择是词法/解析

您将能够相当快地标记代码的各个部分,并能够支持多种语言。

票数 1
EN

Stack Overflow用户

发布于 2015-08-15 17:22:09

iismathwizard是正确的,解析器会更好,但我认为作为regex练习,这是个不错的主意。但是,您可以尝试这样做:

  • 方法:[\w$]+(?=\([^)]*\)\s*\{) 演示
  • Java类:(?<=class\s{0,1000})([\w$]+)(?=(?:\s*(?:implements|extends)\s*(?:[\w$]+))?\s*\{)修改的演示
  • 注释,按类型分组:^(?:\s*?)(?:[^"\n\r]*?(?:"[^"]+?")?[^"\n\r]*?)?(?:(?<endOfLine>//[^\n]*)|(?<javadoc>/\*\*(?:.|\n)+?(?=\*/)\*/)|(?<block>/\*(?:.|\n)+?(?=\*/)\*/))演示

实际上,我宁愿把这个问题分成三个单独的问题,更有道理的是,有人会花一些时间回答一个问题,那就是3。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32020042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档