2014-07-17 3 views
2

Короче говоря, система, над которой я работаю, имеет много слоев. В Java я получаю строку, содержащую условие для оценки. Я получаю строку с возможными появлениями вызовов функций функции «days (int)». Строка может выглядеть следующим образом:Распознавать совпадения шаблонов в String с регулярным выражением

1405555200 + days(4) 

или

1405555200 + days(param_date) 

где первые операнды Unix временные метки. Даты в системе преобразуются в Unix time (Long). По сути, в наши дни (x) вещь внутри строки - это всего лишь обозначение «добавить это много дней к метке времени». Поскольку один день составляет 86400 секунд, мы можем упростить это обозначение, чтобы «добавить 86400 раз к параметру в другой операнд».

Мне нужно найти все вхождения этого шаблона и превратить

1405555200 + days(param_date) 

в

1405555200 + (86400 * param_date) 

Как я могу сделать это чисто?

+0

Вы хотите сделать то же самое для '1405555200 + дней (4)' также? – Braj

+0

@Braj, да, код фактически не должен выполнять арифметику умножения. Он просто должен заменить текст. Параметр, который получает функция days, может быть буквенным значением int или ссылкой, которую нужно просмотреть позже. – rshaq

+0

, но ответы делают это для всех. Позвольте мне обновить свой пост. – Braj

ответ

1

Вы можете использовать String#replaceAll():

String newString = oldString.replaceAll("days\\(([^)]+)\\)", "(86400 * $1)"); 
+0

Это именно то, что я искал. Я плохо с регулярным выражением. Параметр «days \\ ((\\ d +) \\) был тем, что я хотел. Спасибо за помощь! – rshaq

1

код не на самом деле нужно делать арифметику multiplication.It просто должен заменить текст.

Это должно работать с заменой.

(\d+ \+)days\(([A-Za-z_]+)\) 

DEMO

Пример кода:

String str="1405555200 + days(param_date)"; 
String regex="(\\d+ \\+)days\\(([A-Za-z_]+)\\)"; 
System.out.println(str.replaceAll(regex, "$1(86400 * $2)")); 

выход:

1405555200 + (86400 * param_date) 
1

Чтобы быть в безопасности, если текст в скобках может быть что угодно, я хотел бы использовать:

String s = "1405555200 + days(4)"; 
String r = s.replaceAll("days\\((.*?)\\)", "(86400 * $1)"); 
System.out.println(r); //=> "1405555200 + (86400 * 4)" 
Смежные вопросы