正则表达式去除 phpdoc 多行注释

Posted

技术标签:

【中文标题】正则表达式去除 phpdoc 多行注释【英文标题】:Regex to strip phpdoc multiline comment 【发布时间】:2011-02-14 12:46:22 【问题描述】:

我有这个:

/**
 * @file
 * API for loading and interacting with modules.
 * More explaination here.
 *
 * @author  Reveller <me@localhost>
 * @version 19:05 28-12-2008
 */

我正在寻找一个正则表达式来去除除@token 数据之外的所有数据,因此结果将是:

@file API for loading and interacting with modules. More explaination here.
@author Reveller <me@localhost>
@version 19:05 28-12-2008

我现在有了这个:

$text = preg_replace('/\r?\n *\* */', ' ', $text);

它只完成了部分工作:它只删除了每行前面的 *。谁能帮我,所以它也去掉 /** 和最后的斜线 /?任何帮助将不胜感激!

P.S: 例如,如果 commentlbock 包含类似

/**
 * @foo Here's some slashes for ya: / and \
 */

那么显然@foo 之后的斜线可能不会被剥离。结果必须是:

@foo Here's some slashes for ya: / and \

我希望那里有一位正则表达式大师 :-)

【问题讨论】:

【参考方案1】:

试试

$result = preg_replace('%(\r?\n(?! \* ?@))?^(/\*\*\r?\n \* | \*/| \* ?)%m', ' ', $subject);

它将在每行的开头插入一个额外的空格,因此您可能希望在第二步中去除前导空格。

解释:

(\r?\n(?! \* ?@))?:如果可能,匹配一个换行符,除非它后面跟着* @

^: 断言后面的匹配从行首开始

(: 任意匹配

/\*\*\r?\n \*:/**&lt;newline&gt; *

|

\*/:*/

|: 或

\* ?:*,可选地后跟另一个空格

): 交替序列结束

【讨论】:

哇,谢谢!它就像一个魅力 :-) 修剪空白没有问题。 @Reveller,如果这解决了您的问题,您应该将答案标记为已接受,或许也可以投票。 完成了 :-) 谢谢你告诉我。我是新来的,不知道你能做到。

以上是关于正则表达式去除 phpdoc 多行注释的主要内容,如果未能解决你的问题,请参考以下文章

使用 RegEx 去除 C++ 中的多行注释

Python 3 正则表达式查找多行注释

正则表达式删除多行注释

使用正则表达式匹配 Lua 多行字符串和注释

用于匹配单行和多行注释的 Python 正则表达式。

使用 Perl 正则表达式删除多行 C 样式 /* 注释 */