Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式去除所有不情愿的花括号_Java_Regex - Fatal编程技术网

Java 使用正则表达式去除所有不情愿的花括号

Java 使用正则表达式去除所有不情愿的花括号,java,regex,Java,Regex,注意:这是一个仅限Java的问题(即没有Javascript、sed、Perl等) 我需要过滤掉一长串文本中所有“不情愿”的大括号({}) (我所说的“不情愿”是指 我已经找到了以下正则表达式,它正确地查找并列出了所有此类事件: Pattern pattern = Pattern.compile("(\\{)(.*?)(\\})", Pattern.DOTALL); Matcher matcher = pattern.matcher(originalString);

注意:这是一个仅限Java的问题(即没有Javascript、sed、Perl等)

我需要过滤掉一长串文本中所有“不情愿”的大括号(
{}

(我所说的“不情愿”是指

我已经找到了以下正则表达式,它正确地查找并列出了所有此类事件:

    Pattern pattern = Pattern.compile("(\\{)(.*?)(\\})", Pattern.DOTALL);  
    Matcher matcher = pattern.matcher(originalString);
    while (matcher.find()) {
        Log.d("WITHIN_BRACES", matcher.group(2));
    }
我现在的问题是如何将找到的每个
matcher.group(0)
替换为相应的matcher.group(2)

直觉上我试过:

while (matcher.find()) {
  String noBraces = matcher.replaceAll(matcher.group(2));           
}
但这将所有找到的
matcher.group(0)
替换为第一个
matcher.group(2)
,这当然不是我想要的

Java的正则表达式中是否有一个表达式或方法来执行我需要的“对应的replaceAll”

回答:多亏了下面的提示,我想出了两个解决方法:

if (matcher.find()) {
  String noBraces = matcher.replaceAll("$2");           
}
  • 修正1:使用
    “$2”
    而不是
    匹配器。组(2)
  • 修复#2:使用
    if
    而不是
    while

  • 现在就像一个符咒一样工作。

    您可以使用特殊的反向引用语法:


    String noBraces=matcher.replaceAll($2”)

    请提供一些示例输入和预期输出。哦,现在我明白了。您连续两次使用while(matcher.find())
    !这就是为什么第二个循环什么都不做——匹配器已经完成匹配。您必须在一个
    while
    循环中完成所有工作。@Kilian Foth实际上,我没有在一行中使用
    while(matcher.find())
    两次。但是我正在使用
    while()
    ——遍历所有找到的
    matcher.group(2)
    s。你是说我根本不应该
    while()
    ?我现在要试试…@Kilian Foth用
    if()替换
    while()
    ,成功了。这太令人困惑了。。。澄清一下:
    “$2”
    起作用,而
    matcher.group(2)
    不起作用。