用于匹配多行 PHPDoc 注释的正则表达式

Regex for matching multi-line PHPDoc comments

/**
 * Get Data
 *
 * @param null|ProductInterface $product
 *
 * @return string
 * @throws LocalizedException
 * @throws NoSuchEntityException
 */

我想使用正则表达式查找多行 PHPDoc,这样不同类型的 PHPDoc @ 元素之间就没有空行。例如,介于

** @return string
** @throws LocalizedException

相对于:

** @param null|ProductInterface $product
**
** @return string

如果您想知道我为什么需要它 - 我必须在不同类型的 PHPDoc @ 元素之间添加一个新的空行(在那种情况下是@param 和@throws)。

类似这样的方法可行:

正则表达式:

^ \* @([a-z]+).*\K(?=\r?\n^ \* @(?!))
  • ^ \* @([a-z]+).* - 捕获 PHPDoc 行并将 @ 之后的任何内容放入捕获组 </code></li> <li><code>\K - 忘记我们刚刚捕获的所有内容,但 </code> 将保持可用 <ul> <li><code>\K 特定于 PCRE
  • 在替换中,我不想处理捕获组,所以我的目标是在我想​​添加新行的位置声明我的位置
  • (?=\r?\n^ \* @(?!)) - 在我前面应该是另一行 PHPDoc 并且 @ 之后的文本不允许与存储在 </code></li> 中的文本相同 </ul> <p><strong>替换:</strong></p> <pre><code>\n *

    https://regex101.com/r/nZpgkF/1

    ^ 我修改了测试字符串以拆分多个内容,以便您了解它是如何工作的。


    如果 \K 在您的正则表达式风格中不可用:

    正则表达式

    (^ \* @([a-z]+).*)(?=\r?\n^ \* @(?!))
    

    替换:

    \n *
    

    https://regex101.com/r/DZ5EKw/1