Java 模式匹配器不接受论文

Java 模式匹配器不接受论文,java,regex,matcher,Java,Regex,Matcher,当我编译并运行它时,输出是: public class T_token implements Lexer{ static Pattern p = Pattern.compile("\\( | \\) | a"); static Matcher d = p.matcher("( a )"); public static void main(String[] args) { while (d.find()) {

当我编译并运行它时,输出是:

 public class T_token implements Lexer{
        static Pattern p = Pattern.compile("\\( | \\) | a");
        static Matcher d = p.matcher("( a )");

      public static void main(String[] args) {
          while (d.find()) {
            System.out.println(d.group());
          }
      }

所以我给匹配器(变量d)的输入是字符串“(a)”,但它只打印出a,而不是左括号和右括号。。有人能告诉我如何解决这个问题吗?

正则表达式中有两个问题:

  • 您添加了提取空间,这样它将期望模式中的空间找到与您期望的不符的内容
  • 您没有对括号进行转义,括号是用于分组的特殊字符。您需要使用双反斜杠来避开它们
  • 正则表达式应该是
    \\(\124;\\)\ 124a

    输出:

    run:
    
     a
    
    BUILD SUCCESSFUL (total time: 0 seconds)
    

    仔细阅读Javadoc中的
    模式。文字括号必须转义,因为未转义括号是用于分组的元字符。我建议您停下来,花点时间学习正则表达式语法。web上有很多资源,还有Javadoc。您的实际问题是什么?你想得到什么?我输入的是(a),所以我想打印(a),但它忽略了偏执,我编辑了代码,有\(和\),但仍然不起作用。谢谢你,在我提出问题之前,我知道\(和\),但我添加了原始问题,看看是否还有其他问题,但实际的问题是你提到的退格,结果是正确的
    
    (
    a
    )