Java中的困难正则表达式,需要建议

时间:2015-02-24 02:31:04

标签: java regex

我试图在Java中创建一个可以解析以下字符串的正则表达式

g1(g2,g2),g1(g2)

g1(g2(g3,g3),g2),g1(g2)

g1(g2)

我已经尝试了几个小时但我不能制作一个可以拆分以下类中的每个例子。

    public class G1{

      List<G2> list;
    }

    public class G2{

      String g2;
      Set<String> g3;
    }

我需要为每个组提供一个g1实例。

由于

修改

修正了课程。

2 个答案:

答案 0 :(得分:1)

看起来你有一个语法要处理,正则表达式并不是真正适合它的工具,相反,你最好建立一个简单的有限状态机来进行解析。

我不推荐这个简单的选项的另一个选择是使用ANTLR,这是一种旨在进行此类解析的工具。我不推荐它,因为这对工作来说太过分了。

答案 1 :(得分:1)

正则表达式不是一个很好地处理递归的工具。

例如,它不能轻易辨别外括号是你想要的那一行

g1 g2(g3,g3),g2 ,g1(g2)

如果您尝试使用贪婪的正则表达式,它将收集整行g1(g2(g3,g3),g2),g1(g2)。如果你试图去非贪婪,它会收集g1(g2(g3,g3)。可能聚集它的正则表达式非常不稳定,可以很容易地破解。

如果外部组总是被称为g1而g1永远不会嵌套在另一个组中,那么你可能可以使用这样的东西

g1\(.*?\)(?=,g1|$)

实际上,正则表达式不是完成此任务的工具。