哪个是用于数字和字符串的正确正则表达式?

use*_*291 6 java regex jtextpane styleddocument

我正在尝试创建简单的IDE并基于我的JTextPane着色

  • 字符串("")
  • 评论(//和/**/)
  • 关键词(公共,国际...)
  • 数字(像69这样的整数和1.5之类的浮点数)

我为源代码着色的方法是覆盖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)

作为旁注,如果您从
字符串的开头独立地执行每个操作,则可能会重叠高光。