当前位置: 首页 > 知识库问答 >
问题:

Java正则表达式匹配大括号之间的文本

劳通
2023-03-14
program A {
   int x = 10;
   tuple date {
            int day;
            int month;
            int year;
   }
}

function B {
    int y = 20;
    ...
}

process C {
    more code;
}

我想提取A,B,C后面的花括号里的任何东西。我写下面的代码,但它不工作。

public class Test {
    public static void main(String[] args) throws IOException {
        String input = FileUtils.readFileToString(new File("input.txt"));
        System.out.println(input);
        Pattern p = Pattern.compile("(program|function|process).*?\\{(.*?)\\}\n+(program|function|process)", Pattern.DOTALL);
        Matcher m = p.matcher(input);
        while(m.find()) {
            System.out.println(m.group(1));
        }
    }
}

有人能看出我什么地方不对劲吗?

我已经在Javascript中测试了正则表达式,它成功了。看这里。

共有2个答案

衡建中
2023-03-14

试试这个:

Pattern p = Pattern.compile("(program|function|process).*?(\\{.*?\\})\\s*", Pattern.DOTALL);
Matcher m = p.matcher(input);
while(m.find()) {
      System.out.println(m.group(2));
}
谈炳
2023-03-14

尝试

    Pattern p = Pattern.compile("\\{(.*?)\\}(?!\\s*\\})\\s*", Pattern.DOTALL);
    Matcher m = p.matcher(input);
    while (m.find()) {
        System.out.println(m.group(1));
    }

输出

   int x = 10;
   tuple date {
            int day;
            int month;
            int year;
   }


    int y = 20;
    ...


    more code;

我仍然认为这会更可靠

    for (int i = 0, j = 0, n = 0; i < input.length(); i++) {
        char c = input.charAt(i);
        if (c == '{') {
            if (++n == 1) {
                j = i;
            }
        } else if (c == '}' && --n == 0) {
            System.out.println(input.substring(j + 1, i));
        }
    }
 类似资料:
  • 问题内容: 我需要解析一个日志文件并获取时间和相关的函数调用字符串,它以如下方式存储在日志文件中:{“ time”:“ 2012-09-24T03:08:50”,“ message”:“ Call( )开始”} 在其他字符串字符之间将有多个记录的时间函数调用,因此我希望使用正则表达式浏览文件并获取所有这些 我想获取包括大括号在内的整个记录​​的信息 我尝试了以下 和 我不断收到非法的重复错误,请帮

  • 问题内容: 匹配字符串中的’(’的正则表达式是什么? 以下是场景: 我有一串 我想使用正则表达式拆分字符串。为此,我正在使用 但是我收到以下异常。 转义似乎不起作用。 问题答案: 两种选择: 首先,你可以使用转义 回 斜线- 另外,由于它是单个字符,因此您可以将其放入不需要转义的字符类中-

  • 问题内容: 我有类似的东西 商店 结束行像1商店..我想匹配,它使用python正则表达式。 我尝试了类似的方法, 但是没有用。 编辑:添加代码,我试过 请帮助。 谢谢吉乔 问题答案: 或多或少直接回复您的评论 尝试这个 解决方案是使用,而不是使用后者,因为后者试图将整个字符串与regexp匹配,而前者只是试图在字符串内部查找与表达式匹配的子字符串。

  • 本文向大家介绍Java正则表达式程序以匹配括号“(”或“)”。,包括了Java正则表达式程序以匹配括号“(”或“)”。的使用技巧和注意事项,需要的朋友参考一下 以下正则表达式接受带括号的字符串- ^匹配句子的开头。 。*匹配零个或多个(任何)字符。 [\\(\\)]匹配的括号。 $表示句子的结尾。 例子1 输出1 输出2 例子2 输出1 输出2

  • 问题内容: 我正在寻找一个正则表达式来匹配大括号之间的文本。 我希望将它们分别作为单独的组 。 我试过只删除第一个和最后一个大括号。 问题答案: 您需要围绕要捕获的内容使用捕获组。 只是为了匹配并捕获大括号之间的内容。 输出量 如果要三个特定的匹配组… 输出量

  • 问题内容: 我需要的只是括号内的内容。 问题答案: 如果您的问题确实如此简单,则不需要正则表达式: