开发者

Regex to strip phpdoc multiline comment

开发者 https://www.devze.com 2022-12-28 15:36 出处:网络
I have this: /** * @file * API for loading and interacting with modules. * More explaination here. * * @authorReveller <me@localhost>

I have this:

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

I'm looking for a regex to strip all but the @token data, so the result would be:

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

I now have this:

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

It does the job partially: it only removes the * in front of each l开发者_高级运维ine. Who could help me so it also strips /** and the final slash /? Any help would be greatly appreciated!

P.S: If, for instance, the commentlbock would contain something like

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

Then obviously the slashes after @foo may not be stripped. The reult would have to be:

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

I hope there's a regex guru out there :-)


Try

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

It will insert an extra space at the start of each line, so you might want to strip leading whitespace in a second step.

Explanation:

(\r?\n(?! \* ?@))?: If possible, match a newline unless it's followed by * @

^: Assert that the following match starts at the beginning of the line

(: Either match

/\*\*\r?\n \*: /**<newline> *

| or

\*/: */

|: or

\* ?: *, optionally followed by another space

): End of alternation sequence

0

精彩评论

暂无评论...
验证码 换一张
取 消