有如下内容,我想找到log.debug前面没有“)”和“{”的语句,即只找到第2个log.debug,这个正则表达式怎么写?        if (log.isDebugEnabled())  log.debug("********** :");
        
        log.debug("********** :");
        
        if (log.isDebugEnabled())
{
            log.debug("********** :");
}        if (log.isDebugEnabled())
            log.debug("********** :");

解决方案 »

  1.   

    String reg="^[\\s\\)\\{][\\s]*log\\.debug";
      

  2.   

    不行啊,老大,我只想找到第2个log.debug        if (log.isDebugEnabled())  log.debug("********** :");
            
            log.debug("********** :");//该语句才是我要找的,其他都不是
            
            if (log.isDebugEnabled())
    {
                log.debug("********** :");
    }        if (log.isDebugEnabled())
                log.debug("********** :");
      

  3.   

    其实我的企图就是查找所有在 log.debug 前面没有加判断语句 if (log.isDebugEnabled()) 的日志相关代码。
      

  4.   

    [^){]log.debug====CSDN 小助手 V2.5 2005年11月05日发布====
    CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
    界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
    下载:http://szlawbook.com/csdnv2
      

  5.   

    不行啊,各位老大大家可以在editplus中测试啊!
      

  6.   

    这不是一个正则表达式能解决的问题.特别是你要找的内容不在一行内(如果你的内容全在一行内,用正则表达式也是较难实现的)
    我的方案是:
      一行行读入内容,如果内容中有"if",置一标记,继续判有无";",有则表示"if"结束,清标记
      如果if后有"{".则要判到有"}"表示"if"结束,清标记
      在每行读入的同时,再判有无log.debug,如果有且无上述标记,则就是你要的
      

  7.   

    楼主所要的表达式,要求匹配的字符串之前某个条件,这叫做 "反向预搜索"。有关于这一点,推荐搂主参考下面这个文档中的 "2.3 反向预搜索,不匹配" 章节:
    http://www.regexlab.com/zh/regref.htm而 Editplus 不支持反向预搜索,因此,想要不用 "反向预搜索" 写出这个表达式很困难。我测试了多种编辑器,最后发现编辑器中 Eclipse 支持反向预搜索,(当然,支持反向预搜索的正则表达式引擎很多,我说的是现成的编辑器)表达式这样写:
    (?<![){]\s{0,10000})log.debug可以符合搂主要求的 "只匹配第二个 log.debug"
      

  8.   

    我在 Visual C++ 下使用 GRETA 进行了测试,表达式需要这么写:
    (?<=([^){\s]|^)\s*)log.debug\b编写成 C++ 代码:
    rpattern_c pat( _T("(?<=([^){\\s]|^)\\s*)log.debug\\b") , SINGLELINE | NORMALIZE );
      

  9.   

    if (log.isDebugEnabled())  log.debug("********** :");
    .*((\){))log.debug
    java:".*((\\){))log.debug"
      

  10.   

    谢谢大家,我现在正在用eclipse测试,但在多个文件中查找还有一点点问题,测试完我就揭帖,不过100分太少了,我会另开一个帖子给sswater(光杆兵)等加分。
      

  11.   

    我在jbuilder2005测试成功了,(?<![/){]\s{0,10000})log.debug,在eclipse中查找太慢,而且有问题。      if (log.isDebugEnabled())
                     {
                 log.debug("********** :");
                     }         if (log.isDebugEnabled())
                 log.debug("********** :");
             
             if (log.isDebugEnabled())  log.debug("********** :");
             
             log.debug("********** :");//只有这句是我要查找的
             
             //log.debug("********** :");      if (log.isDebugEnabled())
            {
                log.debug("ReportClientDocument initialization finished.");
                log.debug("ReportHandler.initialize() End.");
            }
      

  12.   

    现在还有一个问题: if (log.isDebugEnabled())
            {
                log.debug("ReportClientDocument initialization finished.");
                log.debug("ReportHandler.initialize() End.");//这句也会被查找到
            }上面的第2个log.debug也会被找到,有没有办法让它也不被找到。我的企图就是查找所有的 log.debug 前面没有加判断语句 if (log.isDebugEnabled()) 的日志代码。请 sswater(光杆兵)、 keiy() 等高手继续帮助我!非常感谢!
      

  13.   

    我这里没有 JBuilder ,经过 Eclipse 测试:(?<!\)\s{0,1000})log\.debug(?![^{]*\})
      

  14.   

    如果需要了解这个表达式的编写方法以及更多帮助,请参考下面资料中的 "2.3 预搜索" 章节:http://www.regexlab.com/zh/regref.htm
      

  15.   

    sswater(光杆兵)真是高人,在jbuilder中也是一样的写法,我准备另外新开个帖子,100分太少了。请sswater(光杆兵)到下面的帖领分
    http://community.csdn.net/Expert/topic/4446/4446899.xml?temp=.3027002