2016-02-10 3 views
2

Я исследовал какое-то время, но на удивление ни один из методов или regular expressions Я нашел работу исправно.Удаление всех многострочных комментариев

Мне нужен метод, который удаляет все виды одиночных и многострочных комментариев из файла исходного кода.

Различные regular expressions такие как

sourceCode.replaceAll("(/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/|[ \\t]*//.*)", ""); 

Я попытался в результате исключения:

Exception in thread "main" java.lang.StackOverflowError 

Тогда я и нашел решения, такие как this one, которые работали хорошо, но до сих пор было несколько комментариев персонажей, плавающие вокруг в обработанный исходный код, который не должен происходить.

Другой способ, такой как this one, работал почти идеально, но он не с комментариями формы /*// Hi */ и полностью игнорировал эти блоки.

Я буквально получил другой результат от каждого регулярного выражения, которое я пробовал. Сообщите мне, как надежно выполнить эту задачу.

+0

Возможная Dup. Проверьте решения здесь: http://stackoverflow.com/questions/9078528/tool-to-remove-javadoc-comments – ANooBee

+0

Вы уверены, что регулярные выражения могут вообще это сделать? –

+0

@ANooBee: Это для регулярных комментариев, а не для Javadoc. Регулярное выражение, которое было просто опубликовано как комментарий (и теперь удалено), действительно отлично работало для многострочных комментариев. Это все, что мне нужно, чтобы быть честным: 'sourceCode.replaceAll ("/\\ * [^ *] * \\ * ++ (?: [^/*] [^ *] * \\ * ++) */, ""); – BullyWiiPlaza

ответ

2

Вот упрощенная версия от my answer on JavaScript comment removal:

Заменить:

(?m)((["'])(?:\\.|.)*?\2)|//.*?$|/\*[\s\S]*?\*/ 

С $1.

Demo here

Ответ я связан подробно объясняет, как работает эта модель. Причина, по которой это проще, заключается в том, что Java не имеет регулярных выражений в синтаксисе языка. Они действительно делают замену nasty.

Смежные вопросы