php - 正则表达式 PHP 函数
问题描述
是的,我知道人们不喜欢解析 PHP,使用他们说的分词器,他们说的会很棒......我想让你知道它不是很好,甚至都不是很好。
我在 .NET 中工作并使用 PCRE-NET,想解析一些 PHP 函数,看看我是否可以做一些 PHP 摇树。
我尝试使用CodeParser
which uses Antlr4
to tokenize,我得到的结果很难导航。是的,从技术上讲,一切都在那里,但它是如此令人费解,以至于 Regex 更适合我正在寻找的东西。
我有以下正则表达式工作:
(?<functionScope>\w+)\s*function\s+(?<functionName>\w+)\s*\((?<functionArguments>(?:[^()]+)*)?\s*\)[\s:]*.*(?<functionBody>{(?:[^{}]+|(?-1))*+})
试试看:https ://regex101.com/r/yU6K45/1
这会将 PHP 文件分解为单独的作用域、函数、参数和函数体。我现在正在查看functionBody
并希望找到该函数中使用的所有函数,我在这里:
(?=[^\=\s])((?<functionClass>[$?\w[\w\d]*)?(?<ClassOperator>::|->|\\)?){0,3}?(?<functionName>\w[\w\d]*)\((?<Arguments>.*)?\)
请参阅:https ://regex101.com/r/3JzPR5/1
我遇到的一个问题是命名组。当有很多命名空间时,命名组不能很好地工作。我想知道您是否有任何想法如何拆分线路:
$uri = ExtraLevel\Psr7\UriResolver::resolve(Psr7\Utils::uriFor($config['base_uri']), $uri);
到哪里我会有类似的东西:
Full match ExtraLevel\Psr7\UriResolver::resolve(Psr7\Utils::uriFor($config['base_uri']), $uri)
Group `functionClass` ExtraLevel\
Group `functionClass2` Psr7\
Group `functionClass3` UriResolver::
Group `functionName` resolve
Group `Arguments` Psr7\Utils::uriFor($config['base_uri']), $uri
当没有 3-4 个级别时,希望以一种不会中断的方式进行匹配。
解决方案
推荐阅读
- reactjs - 升级到 Chrome 87 后,React 源代码不再显示在 DevTools 中
- apache - 使用 mod_auth_openidc 连接到具有相同提供程序的多个客户端
- php - 在 Google 图表中获取实时提要
- android - lateinit 属性 appContext 尚未初始化
- github - 官方 GitHub 识别算法
- c# - 获取当前用户的 SID
- amazon-web-services - AWS Redshift 集群调整大小
- angular - 如何在 igxGrid 中对单元格进行模板化?
- node.js - mongodb聚合对象数组
- r - 在函数内调用 stop() 会导致 R CMD Check 抛出错误