【问题标题】:JTextPane: Identifying StringsJTextPane:识别字符串
【发布时间】:2012-05-10 15:30:56
【问题描述】:

我正在尝试使用以下代码在我的 JTextPane 中识别字符串(这意味着双引号内的文本)

Pattern string= Pattern.compile("\"/\"/.*");
Matcher matcher = string.matcher(content);

while (matcher.find()) {
    document.setCharacterAttributes(matcher.start(), matcher.end() - matcher.start(), textPane.getStyle("red"), true);
}

但是上面的代码没有正确识别字符串。我认为我给出的模式是错误的。请帮助我纠正模式。

谢谢大家!我真的很感谢你的帮助!由于您的所有答案都是正确的,因此我很难选择最佳答案,因此我给了你们每个人的赞成票。希望你不介意:)

再次感谢大家!我真的很感激它:)

【问题讨论】:

标签: java regex


【解决方案1】:

正确的表达方式是这样的:

Pattern.compile("\"[^\"]*\"");

【讨论】:

  • 谢谢 Matzi :) 我真的很感激 :)
【解决方案2】:
 String s = "jsdfjh shfslfh \"ksfsdkflsdaf\" 2346237846 ufhusdhfu usfhsdfis \"sadhgbshad78hgshd\" jhsdjs";
        Pattern p = Pattern.compile("\"{1}[.[^\"]]*\"{1}");
        Matcher m = p.matcher(s);
        while(m.find()){
            System.out.println(s.substring(m.start(), m.end()));
        }

【讨论】:

  • 正则表达式中的 {1} 是多余的。任何人都可以帮助我了解 Java 正则表达式中的 [.[^\"]]* 是如何工作的,就像 [^\"]*does 一样?
  • 感谢 Bitmap :) 非常感谢 :)
  • @Borodin:在 Java 中,像 [^\"] 这样的字符类嵌入到另一个字符类中的行为就像它自己一样。这是为了适应 Java 的集合交集运算符 &&,如 [a-z&&[^q]](除 'q' 之外的任何字母)。所以[.[^\"]] 匹配. 或任何不是" 的字符——当然,包括.,所以这部分和{1}“量词”一样冗余。 "\"{1}[.[^\"]]*\"{1}" 完全等同于 "\"[^\"]*\""
【解决方案3】:

我建议你使用的正则表达式是"[^"]*"。引用并转义,即"\"[^\"]*\""

所以试试

Pattern string= Pattern.compile("\"[^\"]*\"");

但请注意,这将无法正确找到包含双引号的字符串,因此我希望您 JTextPane 不包含 Java。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2013-07-20
    • 2011-04-09
    • 2017-02-12
    相关资源
    最近更新 更多