2012-06-08 5 views
2

Как удалить многострочный комментарий с помощью groovy?Groovy удалить multiline comment

/* Use groovy replaceAll regex to 
    remove this comment */ 

Я прочитал в приведенном выше тексте из файла, на объект файла, а затем преобразовать его в строку. И если комментарий охватывает одну строку, можно удалить ее с помощью метода replaceAll как размещены ниже:

def file = new File('myfile') 
def fileString = file.getText() 

println fileString.replaceAll('/\\* .* \\*/','') 

Я пытался использовать (м?) Флаг, но я не могу заставить его признать мой шаблон. Я пробовал следующие утверждения, и все они не соответствуют моему шаблону.

fileString.replaceAll('(?m)/\\* (.*) \\*/' ,'') #multiline switch 
fileString.replaceAll('(/\\*)(.|\n\r)*(\\*/)' ,'') #match all .* (include \n\r) 

Я думал об использовании DotAll, тем (\ ы) в конце, и $ {}. Но я не уверен, как эффективно смешивать его с регулярным выражением. Любая помощь будет приветствоваться. Благодарю.

ответ

7

Попробуйте это выражение:

'(?s)/\\*.*?\\*/' 

(?m) не делает . матч новых линий, (?s) делает это.

+0

Удаляет контент, но оставляет пустую строку. Я хотел бы полностью удалить многострочный комментарий из файла. Благодарю. – tfmontague

+0

, так что просто добавьте новую строку в выражение: ''(? S)/\\ *. *? \\ */\ n'' – rdmueller

0

ли что-то вроде

работу по регулярному выражению части?

(от http://ostermiller.org/findcomment.html)

+0

Это версия * nedit *; вам не нужны элементы '| [\ r \ n]' в Java/Groovy. На самом деле, существует очень мало ароматов, в которых отрицательный класс символов * не соответствует символам новой строки. Эта статья несколько вводит в заблуждение. –

+0

Нет, я попробовал это только сейчас, и интерпретатор сообщает об ошибке 1-го обратного слэша (2-й символ): fileString = fileString.replaceAll ('/ \ * ([^ *] | [\ r \ n] | (\ * + ([^ * /] | [\ r \ n]))) * \ * +/',' ') – tfmontague

+0

@tfmontague, вам нужно избежать некоторых из этих обратных косых черт, как в вашем вопросе. В частности, '\ *' должно быть '\\ *'. –