【发布时间】:2015-08-14 23:33:05
【问题描述】:
我正在创建一个简单的 IDE。
这是通过使用正则表达式检测代码类型并在 JTextPane 中为它们着色来完成的。
目前,我可以检测到:
- 评论
- 字符串字面量
- 数字
- 关键/受限字词
下面是我的程序示例:
问题 1:我的正则表达式检测字符串文字,然后检测 cmets。因此,它会覆盖它的颜色,导致字符串中的 cmets 被错误地着色。
这是用于检测 cmets 的正则表达式:
Pattern commentsSingle = Pattern.compile("\\/\\/.*");
Pattern commentsMulti = Pattern.compile("\\/\\*.*?\\*\\/", Pattern.DOTALL);
这是用于检测字符串文字的正则表达式:
Pattern strings = Pattern.compile("((?<!\\\\)\\\"(.*?)\\\"(?<!\\\\\\\"))");
有没有办法让我的 cmets 正则表达式无法检测到字符串文字(" " 双引号)
或许
无法在 cmets 中检测到的字符串
问题 2:我希望检测方法名称(用户创建的)并将它们着色为不同的颜色。
是否有可以检测方法名称的正则表达式?
问题 3:就像 Q2 一样,我希望检测类名并将它们着色为不同的颜色。
是否有可以检测类名的正则表达式?
--
对不起,我对正则表达式比较陌生,非常感谢任何帮助。
【问题讨论】:
-
你显然没有考虑清楚你的逻辑。
-
@PM 77-1 你的意思是我不应该检测 cmets,然后是字符串并覆盖它的颜色?还是我的正则表达式逻辑不正确?
-
专业提示: 斜线 (
/) 和引号 (") 在正则表达式中都没有任何特殊含义。引号需要用 one 反斜杠转义,因为它在字符串文字中,而斜杠不需要任何。
标签: java regex string methods comments