#java #regex
#java #регулярное выражение
Вопрос:
У меня есть строка входного запроса, которую я хочу переписать в формат ниже.
ввод :
select sum(spend) from test where time = date_add('2008-12-31', 1) and product_name = 'test123';
переписано :
select sum(spend) from test where time = date_add('2008-12-31', interval 1 day) and product_name = 'test123';
Я хочу переписать «date_add (‘2008-12-31’, 1)» на «date_add (‘2008-12-31’, интервал 1 день)»
Пожалуйста, посоветуйте, как я могу это сделать на Java.
Комментарии:
1.
String myNewString = "select sum(spend) from test where time = date_add('2008-12-31', interval 1 day) and product_name = 'test123';";
2. Это регулярное
(.*,s*([0-9] ))
выражение будет соответствовать промежуточному числу()
.
Ответ №1:
final String query = "select sum(spend) from test where time = date_add('2008-12-31', 1) and product_name = 'test123'";
final String newQuery = query.replaceAll("date_add\((.*),\s*([0-9] )\)", "date_add($1, interval $2 day)");
Ответ №2:
mySql.replaceAll("date_add\(('[^']*'), (\d )\)", "date_add($1, interval $2 day")
выполнит наполовину разумную работу. Он слишком чувствителен к расположению пробелов и предполагает буквальную строку даты и будет сомнительным, если в вашем SQL есть строковые литералы, содержащие SQL, но это должно помочь вам начать.
Переписывание исходного кода с помощью регулярных выражений может привести к ошибкам, поэтому перед фиксацией обязательно проверьте diff любых внесенных изменений.