获取正确的正则表达式——Java

获取正确的正则表达式——Java,java,regex,Java,Regex,我试图解析的输出,然后将用于构建控制流的3D图。cflow的输出如下所示: main() <int main (int argc, char *argv[]) at sort.c:3>: strcmp() printf() malloc() getline() <char *getline (int max) at sort.c:62>: isspace() getchar() ungetc(

我试图解析的输出,然后将用于构建控制流的3D图。cflow的输出如下所示:

main() <int main (int argc, char *argv[]) at sort.c:3>:
    strcmp()
    printf()
    malloc()
    getline() <char *getline (int max) at sort.c:62>:
        isspace()
        getchar()
        ungetc()
        malloc()
    qsort()
    free()
现在,我使用的模式使用Emacs的regexp构建器模式。但是当我运行这个程序时,我没有得到任何匹配项。我可能只是不理解Java的正则表达式函数


此外,我意识到显而易见的解决方案是不使用Java。。。我更喜欢这样,但是我要用Processing来绘制图形,所以我真的没有选择。

如果您试图提取字符串的一部分,您必须使用括号在正则表达式中形成组。如果将正则表达式重写为类似于
*([a-zA-Z0-9\]+\\(\\).
,则文字括号中的组实际上存储为匹配项。然后调用
m.group(1)
检索第一个括号组提取的字符串,该括号组是
[a-zA-Z0-9\]+\\(\\)
如果试图提取字符串的一部分,则必须使用括号在正则表达式中形成组。如果将正则表达式重写为类似于
*([a-zA-Z0-9\]+\\(\\).
,则文字括号中的组实际上存储为匹配项。然后调用
m.group(1)
以检索第一个括号组提取的字符串,该括号组是
[a-zA-Z0-9\]+\\(\\)
,使用当前语法和
m.matches()
,Java假定您的意思是:

Pattern p = Pattern.compile("^[a-zA-Z0-9_]+\\(\\)$");
因此,您需要在表达式的开头和结尾添加通配符(我已将您希望匹配的部分包装在括号中)

或者调用
m.find()
而不是
m.matches()

您现在可以拨打:

if(m.matches())
{
    myFunctionName = m.group(1);
}

根据您当前的语法和
m.matches()
,Java假定您的意思是:

Pattern p = Pattern.compile("^[a-zA-Z0-9_]+\\(\\)$");
因此,您需要在表达式的开头和结尾添加通配符(我已将您希望匹配的部分包装在括号中)

或者调用
m.find()
而不是
m.matches()

您现在可以拨打:

if(m.matches())
{
    myFunctionName = m.group(1);
}

我只需要计算前导空格来确定它在树中的深度,并去掉函数名的前导空格,在参数parens之后切掉任何东西。我意识到我可以用普通的字符串操作来完成它,但用正则表达式来完成它似乎更优雅一些。正如第十一位医生可能会说的,正则表达式很酷。你是如何尝试获得匹配的?什么匹配器方法?你的代码工作得很好:哈哈!我没有意识到在获得匹配之前我必须调用
m.find()
。谢谢我只需要计算前导空格来确定它在树中的深度,并去掉函数名的前导空格,在参数parens之后切掉任何东西。我意识到我可以用普通的字符串操作来完成它,但用正则表达式来完成它似乎更优雅一些。正如第十一位医生可能会说的,正则表达式很酷。你是如何尝试获得匹配的?什么匹配器方法?你的代码工作得很好:哈哈!我没有意识到在获得匹配之前我必须调用
m.find()
。谢谢