Как использовать регулярное выражение, чтобы найти полный вызов метода kotlin - PullRequest
0 голосов
/ 09 апреля 2020

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

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

object Log {
    fun i(tag: String, message: String) {
    }
}

В Файл .kt, есть два вызова метода журнала, например:

Log.i("Main", "id: " + String.format(Locale.getDefault(), "%02d", 123)
        + "number: " + 123.toString(2)
        + "time: " + System.currentTimeMillis())

Log.i("Main", "id: " + String.format(Locale.getDefault(), "%02d", 999)
        + "number: " + 888.toString(2)
        + "time: " + Date().time)

Теперь я хочу использовать регулярное выражение, чтобы найти полный вызов Log.i(), например, я хочу сопоставить этот вызов :

Log.i("Main", "id: " + String.format(Locale.getDefault(), "%02d", 123)
        + "number: " + 123.toString(2)
        + "time: " + System.currentTimeMillis())

Я пытался использовать Log\.i\((.+?),([\s\S]*)\) для сопоставления вызова метода, но это будет соответствовать двум предложениям в a.kt.

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

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