Это должно сделать это:
(?s)/\*[^*](?:(?!\*/).)*\(non-javadoc\)(?:(?!\*/).)*\*/
/\*[^*]
соответствует началу комментария в стиле C (/* */
), но не комментарию JavaDoc (/** */
)
(?!\*/).
соответствует любому отдельному символу, если это не начало последовательности */
. Поиск (?:(?!\*/).)*
вместо .*?
делает невозможным начало матча в одном комментарии и конец в другом.
ОБНОВЛЕНИЕ: В (запоздалом) ответе на комментарий Яцека: да, вы, вероятно, захотите добавить что-то в конец регулярного выражения, чтобы вы могли заменить его пустой строкой и не оставлять много пустых строк в вашем коде. Но решение Яцека более сложное, чем должно быть. Все, что вам нужно добавить, это \s*
Экранирующая последовательность \R
соответствует многим видам новой строки, включая разделитель строк Unicode (\u2028
) и разделитель абзацев (\u2029
) и последовательность возврата строки + перевода строки DOS / сети (\r\n
). Но это все пробельные символы, поэтому \s
соответствует им (по крайней мере, в Eclipse; согласно документам , это эквивалентно [\t\n\f\r\p{Z}]
).
\s*
в добавлении Jacek предназначалось только для совпадения с любым горизонтальным пробелом (пробелами или табуляцией), который может существовать до новой строки, плюс отступ после нее. (Вы должны удалить его, потому что вы не удаляете отступ перед первой строкой комментария.) Но оказывается, \s*
может сделать всю работу:
(?s)/\*[^*](?:(?!\*/).)*\(non-javadoc\)(?:(?!\*/).)*\*/\s*