首页 > 解决方案 > 用于拆分 PHPDoc 属性的正则表达式

问题描述

我得到了这个非常具体的正则表达式分配,但无法正确处理。规则是:

完全匹配 - 包含有效属性的 PHPDoc 的每一行
(有效 = 以 @property/@property-read 开头,具有名称和类型)
Group 1 - property/property-read
Group 2 - 类型,可以包含 type|NULL
Group 3 - name,可以包含 name -> otherName
Group 4 (optional) - 注释,可以包含多个单词、数字或其他字符

这是我得到的最接近的:

(?m)@(\S+) (\S+) (\S+(?: -> \S+)*) ?(.*)(?:\*\/)?

它有点工作,但是当 PHPDoc 的结尾与最后一个属性在同一行时会出现问题 - 它使其成为第 4 组的一部分。现在我不确定谁会真正这样写,但我被告知要修复它我不知道怎么做。

测试字符串:

/**
 * Class Object
 * @package Model\Example\Objects
 * @property-read int id
 * @property order_id
 * @property string|NULL external_order_id -> externalOrderId
 * @property string order_source
 * @property int order_source_id
 * @property string order_source_info foo, foo, bar.
 * @property int order_status_id
 * @property int date_add
 * @property int date_confirmed
 * @property int date_in_status
 * @property string user_login
 * @property string phone
 * @property string email
 * @property array products 21 foobar*/

标签: regexregex-groupphpdoc

解决方案


你可以试试这个。

@(\S+) (\S+) (\S+(?: -> \S+)*) ?((?:(?!\*\/).)*)

这是一个演示。


推荐阅读