【问题标题】:Java "PatternSyntaxException" Illegal/unsupported escape sequenceJava“PatternSyntaxException”非法/不受支持的转义序列
【发布时间】:2017-08-02 15:38:00
【问题描述】:

我有以下一段代码,我尝试在模式匹配器中匹配“.I 156”之类的字符串(确切地说是字符 .I(点和 I),然后是空格,然后是整数)

 while (currLine != null) {
        // Check if current line holds the query ID
        String regexp="\\.\\I\\s\\d";
        Pattern pattern=Pattern.compile(regexp);
        Matcher matcher;
        if (pattern.matcher(currLine).matches()) {
            queryBuffer.append(currLine);
            currLine = buffR.readLine();
            queryBuffer.append(".").append(" ").append(currLine);

            QueryListModel.add(iterator, queryBuffer.toString());
            queryBuffer.delete(0, queryBuffer.length());
            iterator++;
        }

        currLine = buffR.readLine();
    }

我从 regexplanet.com 获取了上面显示的正则表达式,我在那里对其进行了测试并得到了验证。我检查了其他网站并进行了验证。 但是,在 Eclipse 控制台中,我收到以下错误:

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 3

\.\I\s\d
   ^

任何帮助表示赞赏。

【问题讨论】:

  • 您不必转义I 字母。
  • \\I 之前有什么意义? (没有,这就是您收到此错误的原因)如果您不从阅读有关它们的教程开始,请使用您理解的工具。
  • 我从在线 reg exp builder 的复制粘贴中插入了 \\。显然我不知道它是不需要的,我认为来源是真实有效的,但事实并非如此。谢谢你的答案,我已经解决了!

标签: java regex parsing


【解决方案1】:
  String regexp="\\.I\\s\\d");

这将匹配以 .I 开头的所有内容,并且它被一个数字所占用,并且它们之间正好有 1 个空格 “.I 12132”或“.I 123213213”

【讨论】:

  • 谢谢你很好地抓住了正好 1 个空白。
  • @segconn 你在说什么? \\s{1} = \\s{1} 是多余的,应该删除,以免混淆任何人。
  • 完成。由于他没有准确解释他想要什么,如果这对他不起作用,我会告诉他更改括号中的数字:)。这就是我把它留在那里的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 2013-07-01
  • 2012-10-18
  • 2013-12-09
  • 2012-12-24
相关资源
最近更新 更多