【发布时间】:2025-12-30 02:30:07
【问题描述】:
我目前在特定情况下遇到了 Regex 的问题:我需要解析 PHP 源文件(尤其是类)以查找在这些文件中定义的常量并将它们检索回输出。
这些常量可以有一些文档(这就是为什么我放弃了反射的想法,因为通过反射检索常量只会返回它们的名称和值),这些文档可能会在 cmets 标记中提供。
我确实设法构建了正则表达式的两个独立部分(一个是注释标记,另一个是 const 声明)但我无法成功地将它们链接起来:似乎第一个常量文件中还将包含所有先前声明的元素,直到它到达第一个注释块。
我的正则表达式如下(我不是正则表达式大神,请随时提出批评):
((\t\ )*(/\*+(.|\n)*\*/)\R+)?([\t| ]*(?|(public|protected|private)\s*)?const\s+([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*=\s*(.*);)
样本测试如下:Regex101
万一初始代码消失:
/**
*
*/
class Test {
/**
*
*/
public const LOL = "damn";
/**
*
*/
private const TEST = 5;
public const plop = "dong";
}
我确实到处寻找提示,我已经了解了积极的后视,但据我了解,它只适用于固定宽度的模式。
我的想法不多了。
【问题讨论】:
-
"(这就是为什么我放弃了反射的想法,因为通过反射检索常量只返回它们的名称和值)" – 从 PHP 7.1.0 开始,@ 987654322@ 类可用,您可以使用
ReflectionClassConstant::getDocComment()检索文档注释。 (small example) -
嗨@salathe!谢谢你的评论 !很好的通知,但我忘了说那里的开发环境被锁定到 5.4(是的,这很糟糕)
-
哦,@salathe 我忘记了这一点,但是通过 Reflection* 检索常量的值可能会改变常量声明和结构(例如带有转义双引号的双引号字符串),这就是我没有使用它的原因第一眼
标签: php regex comments constants