首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配所有顶级函数的正则表达式

匹配所有顶级函数的正则表达式
EN

Stack Overflow用户
提问于 2012-11-07 15:01:02
回答 3查看 117关注 0票数 0

我想用正则表达式解析PHP代码,以找到我们的代码库中声明的所有顶级函数。

简单的:

代码语言:javascript
复制
^\s*function\s*([\w_-]+)\(

工作得很好,但是捕捉到了额外的

代码语言:javascript
复制
class Foo {
  function bar() {...}
}

关于如何跳过没有作用域删除的非顶级函数,有什么想法吗?

注意:我知道,我知道,我应该使用真正的解析器,但我想要的是可以在一个非常大的代码库上运行在grep -R -P中的又快又脏的解析器。

EN

回答 3

Stack Overflow用户

发布于 2012-11-07 15:06:57

在缩进良好的代码库上,

代码语言:javascript
复制
^function\s*([\w_-]+)\(

应该只捕获顶级函数。如果您希望使用前导空格,则可以对{使用zero-width negative look-behind,以避免在类声明的开头使用函数:

代码语言:javascript
复制
(?<!{)\s*function\s*([\w_-]+)\(
票数 0
EN

Stack Overflow用户

发布于 2012-11-07 15:07:29

首先,我不得不说,这类东西在很大程度上取决于你的代码的纪律。对于我自己来说,我会在代码行的开头立即启动所有顶级函数。因此,如果我想找到非顶级函数(在vim中),我只需这样做

代码语言:javascript
复制
/^[[:space:]]\+function[[:space:]]\+\w\+\>

代码语言:javascript
复制
/^function[[:space:]]\+\w\+\>

用于所有顶级函数。

然而,正如我所说的,这取决于你的代码库的格式有多好。祝好运!

票数 0
EN

Stack Overflow用户

发布于 2012-11-07 16:07:45

如果你愿意使用ruby (或者基本上任何带有命名捕获组的东西),你可以使用类似这样的东西:

代码语言:javascript
复制
^\s*(?<type>\w+)\s*(?<name>[\w_-]+)(?<function>\([^()]*\))?\s*(?<body>{((?>[^{}]+)|(\g<body>))*})

作为函数的函数将在function捕获组中有括号。那些是类不会的。

http://rubular.com/r/3dXZts6OYF

不过非常易碎。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13264693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档