use*_*291 6 java regex jtextpane styleddocument
我正在尝试创建简单的IDE并基于我的JTextPane着色
我为源代码着色的方法是覆盖StyledDocument中的insertString和removeString方法.
经过多次测试,我已经完成了评论和关键词.
Q1:至于我的Strings着色,我根据这个正则表达式为我的字符串着色:
Pattern strings = Pattern.compile("\"[^\"]*\"");
Matcher matcherS = strings.matcher(text);
while (matcherS.find()) {
setCharacterAttributes(matcherS.start(), matcherS.end() - matcherS.start(), red, false);
}
Run Code Online (Sandbox Code Playgroud)
这种方式有99%的时间可用,除非我的字符串包含一个特定类型的字符串,其中有一个"\代码内部.这会弄乱我的整个颜色编码.任何人都可以纠正我的正则表达式来修复我的错误吗?
Q2:对于整数和十进制着色,基于此正则表达式检测数字:
Pattern numbers = Pattern.compile("\\d+");
Matcher matcherN = numbers.matcher(text);
while (matcherN.find()) {
setCharacterAttributes(matcherN.start(), matcherN.end() - matcherN.start(), magenta, false);
}
Run Code Online (Sandbox Code Playgroud)
通过使用正则表达式"\ d +",我只处理整数而不是浮点数.此外,作为另一个字符串的一部分的整数是匹配的,这不是我想要的IDE内部.哪个是用于整数颜色编码的正确表达式?
以下是输出的屏幕截图:

感谢您提前帮助!
小智 3
对于字符串,这可能是最快的正则表达式 -
"\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\""
格式化:
" [^"\\]*
(?: \\ . [^"\\]* )*
"
Run Code Online (Sandbox Code Playgroud)
对于整数和小数,我所知道的唯一万无一失的表达式是
这样的 -
"(?:\\d+(?:\\.\\d*)?|\\.\\d+)"
格式化:
(?:
\d+
(?: \. \d* )?
| \. \d+
)
Run Code Online (Sandbox Code Playgroud)
作为旁注,如果您从
字符串的开头独立地执行每个操作,则可能会重叠高光。