【问题标题】:Regex for matching multi-line PHPDoc comments用于匹配多行 PHPDoc 注释的正则表达式
【发布时间】:2021-09-03 05:03:01
【问题描述】:
/**
 * Get Data
 *
 * @param null|ProductInterface $product
 *
 * @return string
 * @throws LocalizedException
 * @throws NoSuchEntityException
 */

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

** @return 字符串
** @throws 本地化异常

相对于:

** @param null|ProductInterface $product
**
** @return 字符串

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

【问题讨论】:

    标签: php regex find phpstorm phpdoc


    【解决方案1】:

    这样的事情可能会起作用:

    正则表达式:

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

    替换:

    \n *
    

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

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


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

    正则表达式

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

    替换:

    $1\n *
    

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

    【讨论】:

      猜你喜欢
      • 2011-02-14
      • 2013-04-20
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 2012-10-26
      • 2014-04-18
      • 2012-10-12
      相关资源
      最近更新 更多