-2

是否可以使用正则表达式解析一些 Java 代码?

所以假设我想要一个int变量列表:

int abc1 = 1;
int abc2 = abc1 + 1;
int abd3 = abc1 + abc2;

我想把这些放到一个ArrayList.

所以是这样的:

private void parse(String s){

    List<List<String>> variables = new ArrayList<List<String>>();

    list.add(new ArrayList<String>);//var type
    list.add(new ArrayList<String>);//var name
    list.add(new ArrayList<String>);//var data

    Pattern p = Pattern.compile();//This is what I want
    Matcher m = p.matcher(s);

    while(m.find()){
        String match = m.group();
        Pattern p2 = Pattern.compile();//Here as well
        Matcher m2 = p.matcher(s);
        while(m2.find()){
            for(int i = 0; i < m.groupCount()){
                //add the variables to the lists
            }
        }
    }
}

我要问的是什么正则表达式可以处理这个任务?


这一切的原因是用户可以使用一些代码(顺便说一句,Android 应用程序)对应用程序进行一些控制

如果不建议使用正则表达式,那么我应该使用什么解析器?

4

5 回答 5

6

您可能希望使用比正则表达式更高级的语法解析应用程序。例如,您可以查看ANTLR,它也有各种可用的语法。

于 2012-06-15T11:02:52.217 回答
6

人们经常尝试使用正则表达式解析 HTML、XML、C 或 java。

通过足够的努力和技巧,正则表达式的复杂组合可以实现许多令人惊奇的事情。但你总是会得到一些非常不完整且效率不高的东西。

正则表达式无法处理复杂的语法,使用通用或特定于 java的解析器。

于 2012-06-15T11:33:05.903 回答
4

您可以尝试使用正则表达式,但使用 Java Parser 可能更容易。你可以试试JavaCC

于 2012-06-15T11:01:47.877 回答
2

我建议您查看解析器生成器,例如。JavaCC。JavaCC 允许您以类似 BNF 的样式描述语法并根据它创建 Java 类。JavaCC 也已经有语法可用于解析 Java 代码,我认为即使作为 JavaCC 附带的示例或教程。

于 2012-06-15T11:06:11.637 回答
2

如果您真的必须使用正则表达式,请尝试类似的(?<=int )\\w+方法,但我强烈建议您使用一些 Java 解析器。

于 2012-06-15T11:07:36.937 回答