2015-10-04 6 views
0

Я пытаюсь написать регулярное выражение java, чтобы удалить всю аннотацию из моего кода, у меня есть довольно сложная аннотация, которые являются вложенными, и до сих пор я мог только соответствовать по внутренним аннотациям, здесь является Exemple моих аннотацийjava regex для соответствия многострочной вложенной аннотации

@annotationA(property1 = "", 
     property2 = "", 
     property3 = "", 
     property4 = "", 
     property5 = "") 
public class ClassA { 

    @annotationB(property1 = @annotationA(property5 = "anyChar", 
      property6 = false, 
      property1 = "anyChar", 
      property2 = "anyChar", 
      property3 = "anyChar", 
      property4 = "anyChar"), 
      params = { @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), }, 
      returnType = @annotationA(property5 = "anyChar")) 
    //some methode 

} 

и вот мое регулярное выражение (не ускользнуло):

@\w+\([\n\w\s=\-"\@,.*:// {\+ }\.;+]+\) 
+0

Регулярные выражения не являются подходящим инструментом для разбора Java-языка. Вы можете использовать генератор синтаксического анализатора, например [antlr] (http://www.antlr.org), хотя кривая обучения может быть крутой. Вы можете найти готовую грамматику для Java-языка по адресу https://github.com/antlr/grammars-v4/blob/master/java/Java.g4 – Gowtham

ответ

1

Если вы пытаетесь удалить аннотации, и у вас есть регулярное выражение, которое будет найти не - вы в основном выполняете. Если это не чувствительная к производительности задача, вы можете просто повторять это регулярное выражение снова и снова, каждый раз удаляя то, что оно соответствует. После того, как внутренние аннотации будут удалены, больше не будет вложенных, чтобы позаботиться. Завершите процесс, когда регулярное выражение ничего не может сопоставить, и все готово!

Ваш пример (в «Блокноте ++») потребовал 3 заменыAlls для полной очистки, что выглядит приемлемым.

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