Невозможно сохранить структуру кода при удалении комментариев - PullRequest
1 голос
/ 19 мая 2019

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

Вот мое первоначальное регулярное выражение (регулярное выражение: 1): (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)

Здесь я настроил регулярное выражение, чтобы попытаться обработать однострочные комментарии внутри кавычек (регулярное выражение: 2): (?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|[^\"](?://.*)[^\"]

Рассмотрим этот пример данных:

// Comment 1
/* Multiline comments
ends here */  Some text
Random statement // something else
import something..
import something else /* few random stuff
that goes on */ /* Lets try this again */
Text to show
val tryThis = "  something // else "
val tryAgain = "12345" 
val again = " /* kskokds // */ "

Фактический результат регулярного выражения: 1 =>

  Some text
Random statement 
import something..
import something else  
Text to show
val tryThis = "  something 
val tryAgain = "12345" 
val again = "  "

Фактический результат регулярного выражения: 2 =>

// Comment 1
  Some text
Random statementimport something..
import something else  
Text to show
val tryThis = "  somethingval tryAgain = "12345" 
val again = "  "

Ожидаемый результат =>

  Some text
Random statement 
import something..
import something else  
Text to show
val tryThis = "  something // else "
val tryAgain = "12345" 
val again = " /* kskokds // */ "

1 Ответ

2 голосов
/ 19 мая 2019

Я успеваю быть первым, кто оставит ссылку на этот известный вопрос: RegEx соответствует открытым тегам, за исключением автономных тегов XHTML

Серьезный ответ

Я думаю, что недостатком здесь является то, что HTML является грамматикой Chomsky Type 2 (контекстно-свободной грамматикой), а RegEx является грамматикой Chomsky Type 3 (обычной грамматикой).Поскольку грамматика типа 2 существенно сложнее, чем грамматика типа 3 (см. Иерархию Хомского), математически невозможно проанализировать XML с помощью RegEx.

Стандарт комментариев Java не является контекстом.бесплатная грамматика.Поэтому все, что было сказано о разборе html, применимо здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...