Regex для удаления многострочного комментария phpdoc - PullRequest
5 голосов
/ 01 мая 2010

У меня есть это:

/**
 * @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: Если, например, комментатор будет содержать что-то вроде

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

Тогда, очевидно, косые черты после @foo не могут быть удалены. Результат должен быть:

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

Я надеюсь, что там есть гуру регулярных выражений: -)

1 Ответ

4 голосов
/ 01 мая 2010

Попробуйте

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

Он вставит дополнительный пробел в начале каждой строки, так что вы можете убрать начальные пробелы на втором шаге.

Пояснение:

(\r?\n(?! \* ?@))?: если возможно, сопоставить новую строку, если за ней не следует * @

^: утверждать, что следующий матч начинается в начале строки

(: либо совпадение

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

| или

\*/: */

|: или

\* ?: *, за которым может следовать другой пробел

): конец последовательности чередования

...