Java 使用正则表达式识别字符串中的模式匹配

Java 使用正则表达式识别字符串中的模式匹配,java,regex,string,expression,Java,Regex,String,Expression,简而言之,我正在研究的系统有很多层。在Java中,我将获得一个包含要计算的条件的字符串。我将收到一个字符串,其中可能出现对函数“days(int)”的函数调用。字符串可能如下所示: 1405555200 + days(4) 或 其中,第一个操作数是Unix时间戳。系统中的日期转换为Unix时间(长)。本质上,字符串中的天数(x)只是“将这么多天添加到时间戳”的表示法。由于一天是86400秒,我们可以将这种表示法简化为“将86400倍的参数添加到另一个操作数” 我需要找到所有出现的这种模式,然后

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

1405555200 + days(4)

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

我需要找到所有出现的这种模式,然后转身

1405555200 + days(param_date)
进入

如何才能干净地完成此操作?

您可以使用:

代码实际上不必做乘法运算,只需替换文本即可

这应该与替换一起工作

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

示例代码:

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)

为了安全起见,如果括号之间的文本可能是任何内容,我将使用:

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

你想对
1405555200+天(4)
也这样做吗?@Braj,是的,代码实际上不需要做乘法运算。它只需替换文本即可。days函数获取的参数可以是一个文本int值,也可以是一个稍后要查找的引用。但是答案会为所有人提供。让我更新我的帖子。这正是我想要的。我不喜欢正则表达式。参数“days\(\\d+)”就是我想要的。谢谢你的帮助!
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)
String s = "1405555200 + days(4)";
String r = s.replaceAll("days\\((.*?)\\)", "(86400 * $1)");
System.out.println(r); //=> "1405555200 + (86400 * 4)"