Regex для удаления блока комментариев Java, содержащего определенные слова - PullRequest
1 голос
/ 25 марта 2011

Я пытаюсь удалить комментарии, содержащие определенный комментарий Java-документа

Например. Я хочу удалить этот блок комментариев

/**
 * @author: Bob
 * @since 28.mar.2008
 *
 */

Но не этот блок

/** 
 * This class represents ...
 *
 * and so on 
 */

Пока у меня есть это регулярное выражение:

^/\*\*(.|\s)+?\*/

Что соответствует блок-комментарию

Но мне нужны некоторые условные выражения где-то там (например, блочный комментарий, содержащий "@since" Я предполагаю, что ключ в том, чтобы использовать взгляд в будущее, но мое регулярное выражение не очень хорошо в данный момент.

Любой, кто может помочь мне улучшить это

Заранее спасибо Боб

Ответы [ 2 ]

8 голосов
/ 25 марта 2011

Поскольку комментарии Java не могут быть вложенными (спасибо @ Paŭlo), для этого есть регулярное выражение.

Вы можете сделать это с помощью:

^/\*\*(?=(?:(?!\*/)[\s\S])*?@author: Bob)(?:(?!\*/)[\s\S])*\*/

Пояснение следует:

^               # start-of-string
/\*\*           # literal "/**" (start-of-comment)

(?=             # begin positive look-ahead (...followed by)
  (?:           #   begin non-capturing group
    (?!         #     begin negative look-ahead (...not followed by)
      \*/       #       literal "*/"
    )           #     end negative look-ahead
    [\s\S]      #     anything, including newlines
  )*?           #   end group, repeat non-greedily
  @author: Bob  #   literal "@author: Bob"
)               # end positive look-ahead

                # ... now we have made sure there is "@author: Bob"
                #     before the end of the comment

(?:             # begin non-capturing group
  (?!           #   begin negative look-ahead
    \*/         #     literal "*/"
  )             #   end negative look-ahead
  [\s\S]        #   anything, including newlines (this eats the comment)
)*              # end group, repeat

\*/             # literal "*/" (end-of-comment)
0 голосов
/ 27 марта 2011

Не могли бы вы просто отключить интерпретацию @author и @since на javadoc?

Существует опция -nosince, чтобы избежать печати блока @since, и @author по умолчанию не включена (требуется опция -author).

Конечно, если вы хотите скрыть, что вы не написали источник самостоятельно, удалите его из источника. (Но убедитесь, что это в пределах той лицензии, которую вы получили.)

...