Найти и заменить шаблон с помощью Java RegEx в комментариях к блоку - PullRequest
0 голосов
/ 25 ноября 2011

Это регулярное выражение, которое используется для поиска блочных комментариев, и оно работает абсолютно нормально

/\\*(?>(?:(?>[^*]+)|\\*(?!/))*)\\*/

Мне просто нужно немного его изменить. Найдите точку с запятой (;), которая может существовать в комментариях блока, и замените ее пробелом.

В настоящее время я делаю это

while (m.find()) {
    if (m.group().contains(";")) {
        replacement = m.group().replaceAll(";", "");
        m.appendReplacement(sb, replacement);
    }
}
m.appendTail(sb);

Но мне нужно заменить его на str.replace. Все виды утверждений. Короче говоря, все, что более эффективно, потому что я получаю исключение из памяти. Я исправил несколько других регулярных выражений, которые вызывали то же исключение, и они работают нормально. Я надеюсь, что это регулярное выражение также может быть оптимизировано.

--- Редактировать ---

Это строка, с которой вы можете проверить это регулярное выражение

/* this* is a ;*comment ; */

/* This ; is* 
another
;*block
comment;
;*/

Спасибо

Ответы [ 2 ]

3 голосов
/ 25 ноября 2011

Будет гораздо проще использовать (?s)/\*.+?\*/ регулярное выражение.В своем выражении вы используете негативные взгляды, которые «съедают» вашу память.И ваш код может быть проще:

while (m.find()) {
    m.appendReplacement(sb, m.group().replace(";","");
}
m.appendTail(sb);
0 голосов
/ 25 ноября 2011

Есть два варианта (попробуйте оба):

1).Почему вы используете ?>?Я не знаю, что это значит, и я не вижу необходимости использовать что-то особенное, например ?>.Измените его на ?:.

2).Твой цикл бесконечен.Вам нужно это:

    int index = 0;
    while (m.find(index)) {
        if (m.group().contains(";")) {
            replacement = m.group().replaceAll(";", "");
            m.appendReplacement(sb, replacement);
        }
        index = m.end();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...