В моих проектах я хочу заменить все устаревшие вызовы 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 предложению вызова метода, как указано выше?