【问题标题】:Java - regex parsing x occurrence of matchJava - 正则表达式解析 x 匹配项
【发布时间】:2018-03-18 12:34:53
【问题描述】:

我想解析这个字符串:

{HHH { AAAA } fS } SFS}

通过括号数字获取输出。如果我想先得到输出应该是:

HHH { AAAA 

当秒:

HHH { AAAA } fS 

等等

我尝试了这个正则表达式,但它没有给我预期的结果:

\{(.*?)\}{1}

【问题讨论】:

  • 这不是你可以用正则表达式轻松完成的事情。您需要解析字符串并找到匹配的括号。见stackoverflow.com/questions/546433/…
  • 是什么让你觉得你想使用正则表达式?
  • 我只是想问一下是否可以使用正则表达式。真是可惜了。啊,谢谢。我将尝试按照 BlackSlash 所说的那样解析它。谢谢
  • 最后我需要两个灵魂:D BlackSlash one 和 YCF_L。再次感谢

标签: java regex string parsing


【解决方案1】:

你可以用逆模式解决你的问题:

public String getResult(String text) {

    Pattern pattern = Pattern.compile("(\\{.*)\\}");
    Matcher matcher = pattern.matcher(text);
    if (matcher.find()) {
        return matcher.group(1);
    } else {
        return null;
    }
}

public static void main(String args[]) {
    Mcve mcve = new Mcve();
    String text = "{HHH { AAAA } fS } SFS}";

    while ((text = mcve.getResult(text)) != null) {
        System.out.println(text);
    }
}

输出

{HHH { AAAA } fS } SFS
{HHH { AAAA } fS 
{HHH { AAAA 

想法是获取第一个结果,然后将此结果发送到相同的方法,直到方法返回null,例如:

  • 发送此字符串{HHH { AAAA } fS } SFS} 接收{HHH { AAAA } fS } SFS
  • 发送上一次迭代的结果{HHH { AAAA } fS } SFS接收{HHH { AAAA } fS
  • 发送上一次迭代的结果{HHH { AAAA } fS接收{HHH { AAAA
  • 现在发送上一次迭代的结果{HHH { AAAA 接收null 停止

【讨论】:

  • 哇!非常感谢!这就是我想要的!你成就了我的一天:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多