如何解决用于匹配多行 PHPDoc 注释的正则表达式
/**
* Get Data
*
* @param null|ProductInterface $product
*
* @return string
* @throws LocalizedException
* @throws NoSuchEntityException
*/
我想使用正则表达式找到 PHPDoc 多行,这样不同类型的 PHPDoc @ 元素之间就没有空行。例如,在
之间** @return 字符串
** @throws LocalizedException
相反:
** @param null|ProductInterface $product
**
** @return 字符串
如果您想知道我为什么需要它 - 我必须在不同类型的 PHPDoc @ 元素(在这种情况下为 @param 和 @throws)之间添加一个新的空行。
解决方法
这样的事情可以工作:
正则表达式:
^ \* @([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 *
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。