【问题标题】:preg_split php function in a php file pattern regexp [duplicate]php文件模式正则表达式中的preg_split php函数[重复]
【发布时间】:2012-06-01 23:33:21
【问题描述】:

可能重复:
Parse PHP code to extract function names?

我正在编写一个脚本来读取我的 PHP 文件并获取所有函数作为返回。

我正在使用preg_split() 将我的文件拆分为一组函数。

我在编写模式以获取所有返回的函数时遇到问题(当函数名称包含“函数”一词时会遇到问题。我愿意接受任何其他解决方案/建议。

预期输出:

array (
  0 => 'function write{$oneparam, $two, $three){return $two}',
  1 => 'function read{$oneparam, $two, $tthree){returne $awesome}',
  2 => 'function edit{$oneparam, $two, $three){return $two},
  3 => 'function delete{$oneparam, $two, $three){return $two}',
  4 => 'function lastfunction{$oneparam, $two, $three){return $two}'
)

【问题讨论】:

  • 使用正则表达式解析编程语言是个坏主意。
  • 你应该使用preg_match_all。不过,为了更准确的结果,tokinizer。让我寻找重复...
  • 这只是为了记录目的,我想记录我的所有功能
  • 不要使用正则表达式,而是使用PHP tokenizer
  • 马里奥 你的回答是对的。这是我的错误。 preg_match_all 完美运行。我道歉

标签: php regex pattern-matching preg-split


【解决方案1】:

您可以尝试这样的方法来仅捕获名称/声明:

#(function\s+\w+\(.*?\)#s

或者这包括函数的主体(假设它们像你的例子一样在一行上):

#(function\s+\w+\(.*?\)\s*{.*?})#s

It works for all of your test cases,没有任何示例输入或更多细节,我无法进一步详细说明。

【讨论】:

  • 如果想要捕获完整的函数体,\{.*?} 部分需要一个嵌套的捕获组;可能是一个完整的语法表示(只有边界可行)来理解“字符串”中的花括号。
  • “或者这包括函数的主体(假设它们像你的例子一样在一行上):”是预期的输出
  • 非常感谢您的帮助。
  • 如果他们不在同一行怎么办? (你知道普通的 php)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2019-06-24
相关资源
最近更新 更多