【问题标题】:Java Regex to match Strings and Chars with ' " 'Java 正则表达式将字符串和字符与 '"' 匹配
【发布时间】:2015-07-10 04:18:52
【问题描述】:

我正在创建一个简单的 IDE 来根据源代码为我的 JTextPane 着色。目前,我可以匹配:

  • 评论 (// & /* */)
  • 字符串 (" ")
  • 数字(整数和小数)
  • 关键字(例如 public / protected ..)

Q1:我想以与字符串相同的方式包含字符着色。例如:char c = 'a';

我是否也应该更改我的字符串正则表达式以适应字符检测?

经过大量测试,我发现当用户输入 char c = ' " '; 时,我检测到一个场景会弄乱我的字符串检测着色;检测到的第二个字符串会将其检测为第一个字符串的一部分 (示例如下所示。

我的字符串着色弄乱了我的整个 IDE 着色:(

这就是我检测字符串模式并为其设置颜色的方式:

Pattern strings = Pattern.compile("\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"");
Matcher matcherS = strings.matcher(text);
while (matcherS.find())
    setCharacterAttributes(matcherS.start(), matcherS.end() - matcherS.start(), red, false);

以下是我的 IDE 的示例输出:

Q2:我应该编辑我的字符串检测正则表达式来解决这个错误吗?

提前致谢。

如果有人觉得有帮助,我的字符串 IDE 检测正则表达式来自:

Which is the right regular expression to use for Numbers and Strings?

【问题讨论】:

  • 如果我可以通过 1 个正则表达式匹配同时获得字符和字符串着色,那将是最理想的情况。
  • 注意项目符号4:blog.codinghorror.com/…

标签: java regex string char jtextpane


【解决方案1】:

这应该可行:

Pattern stringPattern = Pattern.compile("((?<!\\\\)\\\"(.*?)\\\"(?<!\\\\\\\"))");

见:https://regex101.com/r/kT4oZ1/1

【讨论】:

    【解决方案2】:

    为什么不使用现成的库,如下所示:
    https://github.com/bobbylight/RSyntaxTextArea

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2012-11-26
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      相关资源
      最近更新 更多