用于拆分 PHPDoc 属性的正则表达式

Regex for splitting PHPDoc priperties

我得到了这个非常具体的正则表达式分配,但未能正确完成。规则是:

完全匹配 - PHPDoc 的每一行都包含一个有效的 属性
(有效=以@属性/@属性开头-读取,有名称和类型)
第 1 组 - property/property-read
第 2 组 - 类型,可以包含类型|NULL
第 3 组 - 名称,可以包含名称 -> otherName
第 4 组(可选)- 评论,可以包含多个单词、数字或其他字符

这是我得到的最接近的:

(?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*/

你可以试试这个。

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

This is a demo.