Groovy или Java: как получить блок комментариев с помощью регулярных выражений из / ** *** /? - PullRequest
0 голосов
/ 07 октября 2010

Это может быть кусок пирога для экспертов Java.Пожалуйста, помогите мне:

У меня есть блок комментариев в моей программе, как это:

/********* 
block of comments - line 1
line 2
.....
***/

Как я могу получить "блок комментариев" с помощью регулярных выражений?

спасибо.

Ответы [ 3 ]

2 голосов
/ 07 октября 2010

Примерно так должно поступить:

    String str =
        "some text\n"+
        "/*********\n" +
        "block of comments - line 1\n" +
        "line 2\n"+
        "....\n" +
        "***/\n" +
        "some more text";

    Pattern p = Pattern.compile("/\\*+(.*?)\\*+/", Pattern.DOTALL);
    Matcher m = p.matcher(str);

    if (m.find())
        System.out.println(m.group(1));

(DOTALL говорит, что . в шаблоне также должно соответствовать символам новой строки) Печать:

block of comments - line 1
line 2
....
2 голосов
/ 07 октября 2010
Pattern regex = Pattern.compile("/\\*[^\\r\\n]*[\\r\\n]+(.*?)[\\r\\n]+[^\\r\\n]*\\*+/", Pattern.DOTALL);

Это работает, потому что комментарии не могут быть вложены в Java.

Важно использовать квантификатор с неохотой (.*?), иначе мы сопоставим все, начиная с первого комментария и заканчивая последним комментарием в файле, независимо от того, существует ли промежуточный код между ними.

/\* совпадений /*

[^\r\n]* соответствует тому, что находится на остальной части этой строки.

[\r\n]+ соответствует одному или нескольким переводам строки.

.*? соответствует как можно меньшему числу символов.

[\r\n]+ соответствует одному или нескольким переводам строки.

[^\r\n]* соответствует любым символам в строке закрытия */.

\*/ соответствует */.

0 голосов
/ 07 октября 2010

Не уверен насчет многострочных проблем, но все они были в одной строке, вы могли бы сделать это:

^\/\*.*\*\/$

Это разбивается на:

^ start of a line
\/\*+ start of a comment, one or more *'s (both characters escaped)
.* any number of characters
\*+\/ end of a comment, one or more *'s (both characters escaped)
$ end of a line

Покстати, это "регулярное выражение", а не "регулярное выражение":)

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