2015-11-07 4 views
1

Предположим, у меня есть ОГРОМНЫЙ файл. Этот огромный файл содержит кучу кода. В этом коде каждая функция документируется в формате XML. Каждая документация прилагается к «комментариям к документации» (/ ** и ** /). Я хочу регулярное выражение, которое удалит весь код, который не находится между комментариями к документации (который также будет содержать комментарии к документации, но при необходимости я смогу их удалить).Как получить комментарии к документации из файла с помощью RegEx?

Пример части сценария:

/**--------------------------------------------------------------------------**\ 
<summary>FunctionName</summary> 
<returns> 
    Returns 1 on success. 
    Returns 0 on failure. 
</returns> 
<remarks> 
    This function is a function. 
</remarks> 
\**--------------------------------------------------------------------------**/ 

int FunctionName() 
{ 
    int X = 1; 
    if(X == 1) 
     return 1; 
    return 0; 
} 

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

<summary>FunctionName</summary> 
<returns> 
    Returns 1 on success. 
    Returns 0 on failure. 
</returns> 
<remarks> 
    This function is a function. 
</remarks> 
+1

Итак, вы хотите создать документ, состоящий из одних только документаций комментариев? Не думайте об этом как * удалении * или * исключая * части, которые вам не нужны, просто совместите те части, которые вы ** хотите, и записывайте их в новый файл. –

ответ

1

Вы можете использовать этот шаблон:

/^\/(\*\*-+\*\*)\\$(.*?)^\\\1\/$|./gsm 

и заменить $2.

Рабочий пример: https://regex101.com/r/fA8bP0/1

Хитрость в основном так же, как и в Regex Pattern to Match, Excluding when…/Except between - использование чередованием соответствовать тому, что нам нужно, и пропустить все, что мы не хотим.

Некоторые заметки о картине:

  • ^ и $ не строго необходимо - это зависит от того, являются ли комментарии по всей линии. Вы можете удалить их и удалить флаг /m (многострочный).
  • \/(\*\*-+\*\*)\\ соответствует всей строке комментария, /**-------**\.
  • Мы предполагаем, что это то же самое число дефисов в начале блока, что и в конце, и фиксирует его до \1. Если это неверно, используйте \*\*-+\*\* снова вместо \1. Если у вас есть фиксированное количество дефис, вы можете использовать -{74}.
  • Интересный контент снят до $1.
  • Все остальное соответствует . и заменено.
  • Оговорка: эта модель может не обычные способы - строки, содержащие "/**-", прокомментировала код, который выглядит как документация, экранированные символы и т.д.
Смежные вопросы