Java RegEx, чтобы найти имена методов - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу найти имена методов и параметров с помощью RegEx в Java.У меня есть файл C, и я читаю этот файл.Моя часть Regex может найти метод имен, но дополнительно, она находит другие имена, такие как 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; 
}

Существует множество методов, и я не могу написать все методы в "Строковом регулярном выражении", например "\ bfor \ b | \ b while \ b".Есть ли какой-нибудь метод RegEx, чтобы это исправить?или есть метод RegEx, который охватывает все?Он будет просто печатать имена методов и параметров, таких как DiziYazdir, DiziTopla, Main и для методов * p, int uzunluk.

1 Ответ

0 голосов
/ 27 февраля 2019

Следующий reg ex должен работать нормально: одно слово, начинающееся со строки, за которым следует пробел, и другое слово (буквы и цифры), а затем любая последовательность символов в паре паратезов, за которой, возможно, пробел, а затем {

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

как строка Java, я думаю, это должно быть

String pattern = "^\\w*\\s+[\\w\\d]+\\(.*\\)\s?\\{?";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...