Java RegEx 查找方法名称

标签 java regex

我想在 Java 中使用 RegEx 查找方法和参数名称。我有一个 C 文件,我读了这个文件。我的正则表达式部分可以找到名称的方法,但此外,它还可以找到其他名称,例如 printf、scanf...我只需要方法的名称。

public class Deneme {


public static void main(String[] args) throws FileNotFoundException, IOException {

    try{
        File f=new File("C:\\Users\\Emre\\Documents\\NetBeansProjects\\deneme\\src\\deneme\\Program.c"); //Open a file
        String s;
        FileReader reader=new FileReader(f); 
        BufferedReader br=new BufferedReader(reader); //Read file
        while((s=br.readLine())!=null){
            String regex="(?!\\bif\\b|\\bfor\\b|\\bwhile\\b|\\bswitch\\b|\\btry\\b|\\bcatch\\b)(\\b[\\w]+\\b)[\\s\\n\\r]*(?=\\(.*\\))";
            Pattern funcPattern = Pattern.compile(regex);
            Matcher m = funcPattern.matcher(s); //Matcher is used to match pattern with string 
            if(m.find()){
                System.out.println(m.group(0));
            }
        }
    }


    catch(Exception e){
            e.printStackTrace();
    }
}

}

这是我的 C 文件

#include "stdio.h" 
#include "stdlib.h" 

void DiziYazdir(int *p,int uzunluk)
{   
int i=0;  
for(;i<uzunluk;i++) 
printf("%d ",p[i]); 
} 

int DiziTopla(int *p,int uzunluk)
{ 
int i=0;  int toplam=0;  
for(;i<uzunluk;i++) 
toplam += p[i];  
return toplam; 
}

int main()
{ 
int x,y;  
printf("x:");  
scanf("%d",&x);  
printf("y:");  
scanf("%d",&y);  
int sonuc = x + y;  
printf("Sonuc:%d\n\n",sonuc);  
int *dizi = malloc(3*sizeof(int));  
dizi[0]=x;  
dizi[1]=y;  
dizi[2]=sonuc;  
DiziYazdir(dizi,3);  
printf("\n\nToplam Deger:%d",DiziTopla(dizi,3));  
free(dizi);  
return 0; 
}

有很多方法,我无法将所有方法都写在“String regex”中,例如“\bfor\b|\bwhile\b”。有没有正则表达式方法可以解决这个问题?或者是否有一个涵盖整体的正则表达式方法?它只会打印方法和参数的名称,例如 DiziYazdir、DiziTopla、Main 以及方法 *p、int uzunluk。

最佳答案

以下正则表达式应该可以正常工作,一个单词开始行,后跟空格和另一个单词(字母和数字),然后是一对括号内的任何字符序列,后跟可能是空格,然后是 {

^\w*\s+[\w\d]+\(.*\)\s?\{?

作为一个java字符串我想它应该是

String pattern = "^\\w*\\s+[\\w\\d]+\\(.*\\)\s?\\{?";

关于Java RegEx 查找方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905493/

相关文章:

java - 使用 'if (position == x)' 替换主 fragment

java - Java中如何获取akka的 Actor 名字?

java - JAXB:如何实现 JAXB 兼容的变体包装类?

java - 为什么java中的html不起作用?

javascript - 正则表达式将 URL 与正好一个文件夹深度匹配

java - Java中如何用逗号和空格分割表达式?

regex - 在 perl 中使用未初始化的值

java - 来自随机值的 Minimax 结果给出了意想不到的低结果

python重新问题

regex - perl - 使用正则表达式获取子字符串