2011-09-15 56 views
0

我使用linux上的ctags为使用vim和Tlist插件的源代码创建标签。当前用于PHP的ctags函数解析是可悲的,所以我已经下载了ctags和im的源代码去改变解析函数的正则表达式。使用PHP regex从PHP源码解析函数名称?

因为我正在处理很多以多种不同方式声明函数的代码,所以我需要一个正则表达式来可靠地解析函数名。

你有一个可以共享的解析一个源代码行的PHP函数名称?

这是当前修补和“改进的”一个从其中错过许多功能,特别是那些标记为finalstatic第一CTAGS源。

(^[ \t]*)(public[ \t]+|protected[ \t]+|private[ \t]+)?(static[ \t]+)?function[ \t]+&?[ \t]*([" ALPHA "_][" ALNUM "_]*) 
+0

您所有的'[\ t]'应该是'\ S +'。 'public \ n function'完全有效。 – meagar

+0

这不是我的来源,我正在努力寻找更强大的解决方案。我虽然在写一个怪物之前会问; –

+1

为什么你不使用反射? – Gordon

回答

1

只是将静态和最终添加到可能的单词列表忽略,并使其匹配多个关键字之一足够接近?

(^[ \t]*)((public|protected|private|static|final)[ \t]*)*function[ \t]+&?[ \t]*([" ALPHA "_][" ALNUM "_]*) 

将意味着它会接受垃圾像“公共公共静态最终功能伪造()”,但PHP的语法检查会拒绝它,因此应该不会有显著的问题。

0
s/^.*\sfunction\s([^\(]*)\(.*$/\1/i 

我测试了一些sed的

grep -Ri function *| head -10 | sed 's/^.*\sfunction\s\([^\(]*\)(.*$/\1/i' 
+0

你只想要功能名称权利? –

+0

是的,只是功能名称。这几乎是我想出来的,我认为前面的关键字只是会被忽略,只是检查任何东西。 –