Регулярное выражение перезаписывает входную строку в java

#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 любых внесенных изменений.