我正在创建一个简单的IDE。
这是通过使用regex检测代码类型并在JTextPane中对它们着色来完成的。
目前,我可以发现:
下面是我的程序示例:
问题1:我的正则表达式检测字符串文字,然后是注释。因此,它覆盖了它的颜色,导致字符串中的注释被不正确地着色。
这是用于检测注释的正则表达式:
Pattern commentsSingle = Pattern.compile("\\/\\/.*");
Pattern commentsMulti = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL);
这是用于检测字符串文字的regex:
Pattern strings = Pattern.compile("((?<!\\\\)\\\"(.*?)\\\"(?<!\\\\\\\"))");
是否有一种方式使我的注释regex不会检测到字符串文本(“”双引号)
或者也许
不会检测到内部注释的字符串。
问题2:我希望检测方法名(用户创建的),并将它们着色为不同的颜色.
是否有可以检测方法名称的正则表达式?
问题3:就像Q2一样,我希望检测类名并给它们涂上不同的颜色。
是否有可以检测类名的正则表达式?
--
很抱歉,我的长期职位,我是相对较新的regex和任何帮助,将非常感谢。
发布于 2015-08-14 15:43:52
专业提示:你做错了。
编程语言中有太多复杂的结构,无法用regex来解释。即使语言相当简单,正则表达式也会很快变得过于笨重,无法维护和更新。不仅如此,正则表达式也很快开始在大型数据集中缓慢运行。
你最好的选择是词法/解析。
您将能够相当快地标记代码的各个部分,并能够支持多种语言。
发布于 2015-08-15 09:22:09
iismathwizard是正确的,解析器会更好,但我认为作为regex练习,这是个不错的主意。但是,您可以尝试这样做:
[\w$]+(?=\([^)]*\)\s*\{)
演示(?<=class\s{0,1000})([\w$]+)(?=(?:\s*(?:implements|extends)\s*(?:[\w$]+))?\s*\{)
修改的演示^(?:\s*?)(?:[^"\n\r]*?(?:"[^"]+?")?[^"\n\r]*?)?(?:(?<endOfLine>//[^\n]*)|(?<javadoc>/\*\*(?:.|\n)+?(?=\*/)\*/)|(?<block>/\*(?:.|\n)+?(?=\*/)\*/))
和演示实际上,我宁愿把这个问题分成三个单独的问题,更有道理的是,有人会花一些时间回答一个问题,那就是3。
https://stackoverflow.com/questions/32020042
复制相似问题