2010-02-26 81 views
1

如何用正则表达式搜索包含使用全局变量而不首先运行“global $ var”的函数?用正则表达式搜索函数中的内容

这些文件看起来是这样的:

class TestClass 
{ 
    function correctFunc() 
    { 
     global $var; 
     $name = $var->name; 
    } 

    function invalidFuncIWantToFind() 
    { 
     $age = $var->user->age; 
    } 
} 

我想找到所有的invalidFuncIWantToFind的函数名。在工作中,这确实会加速我们的工作,但我没有得到如何去做。

+2

当您处理像PHP这样的非常规语言时,不要使用正则表达式。 – Gumbo 2010-02-26 19:03:40

+0

如果你想要一个快速&肮脏和容易出错的解决方案,正则表达式可能工作。如果你想要一个稳定的解决方案,你应该看看解析器生成器的上下文无关语法(例如antlr.org)。你想要什么样的解决方案? – stmax 2010-02-26 19:12:41

+0

我想要一个快速而肮脏的解决方案。 :)我继续玩这个和“function \ s +(\ w +)。*?(\ {。*?(\ {。*?\})*。*?\})”所有的功能。现在我只需要获取那些包含“$ var->”的文件,而不必先拥有“global $ var;”不知道如何做到这一点。 – Marlun 2010-02-26 19:27:02

回答

0

根据您的Regex实现,您可能可以使用lookbehind模式。 http://www.regular-expressions.info/lookaround.html声称例如.NET Framework实现可以做到这一点。 (有问题的是,后视可以包含可变数量的字母......这似乎会造成麻烦)。 因为我手头没有Visual Studio,所以我不能为你构建正则表达式,但是,对不起。

+0

是的,我一直在试图用lookbehind来做,但还没有得到一些工作。 – Marlun 2010-02-28 16:56:05