регулярное выражение Java частичная замена - PullRequest
0 голосов
/ 02 сентября 2018

Я работаю с устаревшим кодом, у которого есть статический вызов метода, который нам нужно удалить из нашего дерева исходных текстов.

Существующий код выглядит следующим образом:

Logger.getInstance(JdkUtil.forceInit(SomeBusiness.class));

То, что нам нужно, это:

Logger.getInstance(SomeBusiness.class);

Я провел весь день сегодня, пытаясь понять, как сделать эту замену. Поскольку у меня очень мало опыта работы с регулярными выражениями, я смог придумать только шаблон, соответствующий исходной строке.

Шаблон JdkUtil.forceInit ([a-zA-Z_0-9] *. Class) находит совпадения во входной строке, которую я предоставляю. Я проверял это в https://www.freeformatter.com/java-regex-tester.html

Так что если кто-то может опубликовать Java-решение для этого, я был бы очень признателен.

Ниже приведен некоторый Groovy-код, который у меня есть. Чего мне не хватает, так это того, как правильно замена объясняется выше.

String source = 'Logger.getInstance(JdkUtil.forceInit(RtpRuleEngineCompiledImpl.class))'
    String regexpPattern = 'JdkUtil.forceInit\\([a-zA-Z_0-9\\)]*.class\\)'

    String replaced = source.replaceFirst(regexpPattern, 'hello')

    println replaced

Когда я запускаю приведенный выше код, я получаю следующий вывод:

Logger.getInstance (привет) * * одна тысяча двадцать-одна

Очевидно, что "привет" только для тестирования.

Заранее спасибо всем, кто может дать мне несколько советов.

1 Ответ

0 голосов
/ 02 сентября 2018

Скорее всего, вы захотите сделать что-то вроде:

class StackOverflow {
    public static void main(String[] args) {
        String source = "Logger.getInstance(JdkUtil.forceInit(RtpRuleEngineCompiledImpl.class))";
        String regexpPattern = "JdkUtil.forceInit\\(([a-zA-Z_0-9]*.class)\\)";
        String replaced = source.replaceFirst(regexpPattern, "$1");
        System.out.println(replaced);
    }
}

Результат

Logger.getInstance(RtpRuleEngineCompiledImpl.class)

Группа захвата ($1) заменяет всю строку, которая была в скобках.

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