使用正则表达式识别String中的模式匹配

时间:2014-07-17 19:55:01

标签: java regex string expression

简而言之,我正在研究的系统有很多层。在Java中,我将获得一个包含要评估的条件的String。我将收到一个字符串,其中可能出现对名为“days(int)”的函数的函数调用。字符串可能如下所示:

1405555200 + days(4)

1405555200 + days(param_date)

其中第一个操作数是Unix时间戳。系统中的日期转换为Unix时间(长)。从本质上讲,字符串中的这一天(x)事物只是“将这么多天添加到时间戳”的符号。由于一天是86400秒,我们可以将此表示法简化为“将参数的86400倍添加到另一个操作数”。

我需要找到这种模式的所有出现并转向

1405555200 + days(param_date)

1405555200 + (86400 * param_date)

我怎样干净利落地做到这一点?

3 个答案:

答案 0 :(得分:1)

您可以使用String#replaceAll()

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

答案 1 :(得分:1)

  

代码实际上不需要进行乘法运算。只需要替换文本。

这应该适用于替代。

(\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)

答案 2 :(得分:1)

为了安全,如果括号之间的文字可以是任何内容,我会使用:

String s = "1405555200 + days(4)";
String r = s.replaceAll("days\\((.*?)\\)", "(86400 * $1)");
System.out.println(r); //=> "1405555200 + (86400 * 4)"