如何用 PHP 解析 phpDoc 风格的注释块?

2024-01-08

请考虑以下代码,我尝试仅解析文件中的第一个 phpDoc 样式注释(不使用任何其他库)(出于测试目的,将文件内容放入 $data 变量中):

$data = "
/**
 * @file    A lot of info about this file
 *          Could even continue on the next line
 * @author  [email protected] /cdn-cgi/l/email-protection
 * @version 2010-05-01
 * @todo    do stuff...
 */

/**
 * Comment bij functie bar()
 * @param Array met dingen
 */
function bar($baz) {
  echo $baz;
}
";

$data =  trim(preg_replace('/\r?\n *\* */', ' ', $data));
preg_match_all('/@([a-z]+)\s+(.*?)\s*(?=$|@[a-z]+\s)/s', $data, $matches);
$info = array_combine($matches[1], $matches[2]);
print_r($info)

这几乎有效,除了以下事实:一切@todo 之后(包括bar()注释块和代码)被认为是的值@todo:

Array (
    [file] => A lot of info about this file Could even continue on the next line
    [author] => [email protected] /cdn-cgi/l/email-protection
    [version] => 2010-05-01
    [todo] => do stuff... /

    /** Comment bij functie bar()
    [param] => Array met dingen /
    function bar() {
      echo ;
    }
)

我的代码需要如何更改,以便仅解析第一个注释块(换句话说:解析应该在遇到第一个“*/”之后停止?


使用 PCRE 编写解析器会给你带来麻烦。我建议依靠分词器 http://www.php.net/tokenizer or 反射 http://www.php.net/manual/en/reflectionclass.getdoccomment.php第一的。那么实际为 doc 块实现一个解析器会更安全,它可以处理 doc 块支持的所有情况phpdoc http://www.phpdoc.org/格式(所有库最终都要做的事情)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用 PHP 解析 phpDoc 风格的注释块? 的相关文章

  • 当用户再次访问同一页面时保持登录状态?

    目前我正在使用会话来登录用户 但是当我关闭浏览器并再次打开它时 我必须再次登录 你如何让用户在 2 周内保持登录状态 那么是通过cookie吗 那么您想要 在这台计算机上记住我 选项吗 这是一种与语言无关的方法 创建一个至少包含以下内容的数
  • jsf 2.0 中看不见的注释? [复制]

    这个问题在这里已经有答案了 是否可以在我的 xhtml 文件中嵌入注释 这些注释仅显示在源代码中 而不显示在渲染结果中 我想在文件中包含作者 日期 但最终用户在生成的输出中不应该看到它们 如果我使用标准评论标签浏览器显示它们 将以下内容添加
  • PHP:STR 替换为链接

    我有这个 PHP 聊天框 如果我在聊天框中键入链接 它不会将其显示为链接 我如何使用 STR 替换来执行此操作 它应该响应诸如 http http com nl www www 之类的内容 我的其他 STR 替换行如下所示 bericht
  • 如何在正则表达式中输入“:”(“冒号”)?

    冒号 在正则表达式中具有特殊含义 但我需要按原样使用它 例如 A Za z0 9 我试图逃避它 但这不起作用 A Za z0 9 在大多数正则表达式实现 包括 Java 的 中 无论在字符类内部还是外部 都没有特殊含义 您的问题很可能是由于
  • 无论如何要抓取重定向的链接吗?

    无论如何 我可以让 python 单击一个链接 例如 bit ly 链接 然后抓取生成的链接吗 当我抓取某个页面时 我唯一可以抓取的链接是重定向的链接 它重定向到的位置就是我需要的信息所在的位置 重定向有 3 种类型 HTTP 作为响应标头
  • PHP服务器端IAB验证openssl_verify总是返回0

    我使用以下函数 服务器端 php 来验证 IAB v3 事务 我从 Android 应用程序传递过来 Override protected void onActivityResult int requestCode int resultCo
  • Symfony 学说错误“DoctrineMigrationsBundle 需要启用 DoctrineBundle。”

    我创建了一个新的 Symfony 项目 并且不断收到此消息 DoctrineMigrationsBundle 需要启用 DoctrineBundle 错误并且无法摆脱它 显然我是这个星球上唯一一个收到此错误的人 因为谷歌并没有太大帮助 在
  • json_encode 创建格式错误的 JSON 数据?

    我有一个 codeigniter 应用程序将一些数据从数据库返回到视图 我正在尝试将其作为 json 数据发送回来 问题是返回的数据格式错误 它看起来像这样 2 5 Admin1 2 10 Admin2 当我在 jsonlint com 上
  • 正则表达式替换混合数字+字符串

    我想删除所有包含数字的单词 示例 LW23 London W98 String 从上面的字符串中我唯一想保留的是 London String 这可以用正则表达式来完成吗 我目前正在使用 Python 但 PHP 代码也很好 Thanks E
  • 获取目录中最后修改的文件

    有没有办法只选择目录中的最后一个文件 扩展名jpg png gif 或者我是否必须解析整个目录并使用进行检查filemtime 是的 你必须通读它们 但由于目录访问已被缓存 因此您不必真正担心它 files array merge glob
  • Lumen 微框架 => php artisan key:generate

    我正在尝试 PHP 微框架 Lumen 来自 Laravel 我的第一步就是调查 env example文件并复制一份以供我使用 env文件 就像 Laravel 中一样 有一个变量 APP KEY 现在我尝试了简单的命令php artis
  • PHP URL 验证

    我知道有无数的线程问这个问题 但我一直无法找到一个可以帮助我解决这个问题的线程 我基本上试图解析大约 10 000 000 个 URL 的列表 确保它们根据以下标准有效 然后获取根域 URL 此列表包含您能想象到的几乎所有内容 包括类似的内
  • 使用 PHP 修剪字符串开头的任何零

    用户将在字段中填写与其帐户相关的数字 不幸的是 一些用户会在号码开头添加零来组成六位数字 例如 000123 001234 而其他用户则不会 例如 123 1234 我想 修剪 前面带有零前缀的用户的数字 因此如果用户输入 000123 它
  • 使用 Flot、html、PHP 和 MySql 查询绘制多个图表

    我正在尝试使用 Flot html PHP 和 MySql 查询绘制多个图表 但我陷入了困境 因为我找不到在同一个 html 页面中绘制多个 flot 的方法 为简单起见 在数据库 test db3 映像中包含以下字段 表1 用户名 发送邮
  • 如果文件名减去扩展名,.htaccess url 重写行为将被覆盖。与网址相同

    我正在尝试整理 URL 并从中删除 php 扩展名等 我位于网站的基本文件夹中 因此没有可以优先处理的父 htaccess 文件或其他文件 这是我的 htaccess 代码 RewriteEngine On RewriteRule give
  • 在 Windows 上查看 PHP 文件夹

    我正在编写一个简单的 PHP 脚本来监视文件夹及其子文件夹的任何更改 新文件 修改 删除 然后执行操作 我将使用 Windows 上的命令行运行此脚本php f script php 我一直在寻找一种在 Windows 上观看具有 PHP
  • PHPunit - 错误

    当 PHPunit 框架不希望发生的错误发生时 测试会停止 PHP 会抛出错误 但 PHPunit 不会记录这是一个错误 我如何确保 PHPunit 将其记录为错误 免责声明 我是 PHPUnit 的新手 我也试图弄清楚 发生错误时会发生什
  • 准备好的语句需要 0 个参数,给定 1 个参数..,使用 php 手册示例 [重复]

    这个问题在这里已经有答案了 我直接从 php 手册示例中获取了这个 它几乎与我需要的相同 但我仍然收到此错误 有人可以告诉我我错过了什么吗 stmt link gt prepare SELECT obitBody Photo FROM tn
  • 如何使用Gson仅从Json反序列化某些特定字段?

    我有以下 JSON 字符串 channel bvmt initValues data value instrumentIds TN0007250012 TN0007500010 instruments mnemonic ADWYA marc
  • 使用 md5 加密的 PHP 和 Mysql 查询出现问题

    我使用普通的 php mysql 插入查询并使用 md5 加密密码 这是插入查询 sql mysql query INSERT INTO user username password role approved values usernam

随机推荐

  • 如何将范围分配给 ssrs 2012 中的报表变量

    我是 SSRS 2012 的新手 有着使用 BusinessObjects 的悠久背景 因此有时我很难知道如何搜索正确的术语 我有一个这样的报告 其中各部分位于 tablix 中 而总计位于另一个中 这个布局是必需的 或者这会更简单一点 S
  • Swift 的 hash 和 hashValue 之间的区别

    The HashableSwift 中的协议要求您实现一个名为的属性hashValue protocol Hashable Equatable Returns the hash value The hash value is not gua
  • C语言的回文程序

    我的 C 程序是回文 其功能有错误 我的函数不是比较字符串中的 2 个字符 当我输入单个字符时 它会回答回文 但如果是两个或更多字符 则始终不是回文 Code int IntStrlength strlen StrWord int IntC
  • SQL Server TRY...CATCH 与 XACT_STATE

    我对 MSDN 文档有疑问TRY CATCH块 查看这篇文章并向下滚动到示例 C 使用 TRY CATCH 和 XACT STATE http msdn microsoft com en us library ms175976 aspx h
  • 熊猫:删除连续的重复项

    在 pandas 中仅删除连续重复项的最有效方法是什么 drop duplicates 给出 In 3 a pandas Series 1 2 2 3 2 index 1 2 3 4 5 In 4 a drop duplicates Out
  • IE8 中的 CSS 最大宽度

    对于我的输入 可以有classname half or half not placeholder value Firebug 显示两个输入都有一个固定的宽度25em input half input half not placeholder
  • 将 CSS“#”(ID)替换为 .(类)

    我有一个像这样的CSS字符串 xyz color ee2ee2 abc background color FFFFFF border color 1px solid eee def xyz border color 1px solid dd
  • 解决灾难性回溯的工具[重复]

    这个问题在这里已经有答案了 我一般要求提供一种工具或方法来查找正则表达式中导致不受控制的回溯的 热点 我对所有格匹配 否定前瞻断言 原子组等有相当好的掌握 但我面临着一种情况 不清楚我的正则表达式到底错在哪里 有问题的正则表达式是 PCRE
  • 文件搜索索引的算法问题

    有一个问题 我也有解决方案 但我无法理解解决方案 请提供一些示例并提供一些经验 Question 给定一个包含大约 3 亿个社会安全号码 9 位数字 的文件 查找文件中没有的 9 位数字 您拥有无限的驱动器空间 但只有 2MB 的 RAM
  • 如何将 Google One Tap 登录与 django-allauth 集成?

    如何将 Google One Tap 登录体验与 django allauth 集成 django allauth 是集成的 非常适合简单的用户名 密码登录 我拥有 Google OneTap 更好的用户体验 可以识别用户经过身份验证的 G
  • 从 Leaps regsubsets 获取所有模型

    我使用 regsubsets 来搜索模型 是否可以自动创建所有lm从参数选择列表中 library leaps leaps lt regsubsets y x1 x2 x3 data nbest 1 method exhaustive su
  • 如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]

    这个问题在这里已经有答案了 我正在使用 AJAX 从 PHP 文件中获取 JSON 编码的数组 但在 JavaScript 中我需要将其用作数组 如何在 Javascript 中创建数组 我对 PHP 文件的 AJAX 调用 ajax ty
  • 如何在 Spinner 中选择项目并将其用作字符串?

    只是想看看我是否可以找出如何在微调器中选择项目并将其存储在字符串中 我已经看到了有关此问题的其他帖子 人们说将此行放入代码中 在我在下面发布的代码的最后一行下面 String Genders Gender getSelectedItem t
  • 将代码分配给动态创建的按钮

    我正在尝试获取一个在 Excel 用户表单上动态创建的按钮来运行名为的宏transfer我写过的Module 1我的项目的 模块 部分 下面我将迄今为止编写的代码粘贴到用户窗体中 该窗体实际上设法创建了Transfer to Sheet框架
  • “创建用户”怎么写?使用 MySQL 准备好的语句

    I tried SET user foo localhost SET pass bar SET sql CREATE USER IDENTIFIED BY PREPARE stmt FROM sql 我得到错误 ERROR 1064 420
  • FastAI lrfind()方法无法正常工作

    Update 1 我根据 无论坡度如何 你都希望从该点返回 10 倍 更新了我的 lr 并将其设置为 max lr 切片 1e 3 1e 2 这就是我得到的 和情节 这是什么意思 正如您在第二张图中看到的那样 从 1e 08 开始损失就非常
  • 为什么 JUnit 中不推荐使用assertEquals(double,double)?

    我想知道为什么assertEquals double double 已弃用 I used import static org junit Assert assertEquals 我使用的是 JUnit 4 11 下面是我的代码 import
  • 返回指向本地结构的指针

    我看到一些具有如下结构的代码示例 type point struct x y int func newPoint point return point 10 20 我有 C 背景 这对我来说似乎是错误 这种构造的语义是什么 新的点是分配在栈
  • 在行内插入表格

    我编写了一个包含两个表的脚本 tbl1是一个主表 tbl2是我想插入到的第二个表tbl1第二行使用纯JavaScript 它工作完美 但是我的tbl2有一些html attribute 插入后看到代码时没有看到 note tbl1 and
  • 如何用 PHP 解析 phpDoc 风格的注释块?

    请考虑以下代码 我尝试仅解析文件中的第一个 phpDoc 样式注释 不使用任何其他库 出于测试目的 将文件内容放入 data 变量中 data file A lot of info about this file Could even co