在Java代码中调用非注释方法的正则表达式

时间:2014-08-20 15:08:27

标签: java regex

我需要一个正则表达式来匹配我的java代码中的方法调用,其中方法调用没有被任何java注释类型包围。

实际上,我的要求是找到在非注释代码中调用此方法的所有java文件。

例如,getMessage是方法调用,并提供以下代码作为输入.. RegEx应仅匹配第12行。

// Systme.out.println (obj1.getMessage());  //line 1
/* Systme.out.println (obj.getMessage());*/ //line 2    
/* public void test() {                     //line 3    
   Systme.out.println (obj2.getMessage());  //line 4
   }                                        //line 5
*/                                          //line 6    
/**public void test () {                    //line 7
  * Systme.out.println (obj3.getMessage()); //line 8
  *}                                        //line 9
  */                                        //line 10
public void test() {                        //line 11
      Systme.out.println (obj5.getMessage());//line 12
 }

我首先尝试匹配否定的情况,即注释中的方法调用,然后尝试否定表达式。为此,我使用了.. (?=(//|/*|*)).*getMessage.*,它仍然不会覆盖第4行的方法调用。

但即使在那之前......当我使用(?!(//|/*|*)).*getMessage.*使用负面看时,它甚至开始匹配所有方法调用。然后,我明白我错过了原子分组的概念,并试图探索它但不能得到太多。

如果你能帮助我解决这个问题,我将不胜感激。提前谢谢,

PS:我只需要RegEx而不是java代码,因为我只需要提供表达式作为系统的输入。

1 个答案:

答案 0 :(得分:0)

我会分两个阶段来做这件事

  1. 删除注释的java文件中的所有内容 - 例如/ * * /之间的所有内容以及以// +一些例外开头的每一行
  2. 为方法调用运行简单的正则表达式,例如。 .\w+?(.*|methodName).*;