【发布时间】:2013-05-11 22:19:56
【问题描述】:
我一直在尝试将这个数学函数 x^2*sqrt(x^3) 替换为这个 pow(x,2)*Math.sqrt(pow(x,3))
所以这是正则表达式
/([0-9a-zA-Z\.\(\)]*)^([0-9a-zA-Z\.\(\)]*)/ pow(\1,\2)
它在 ruby 中有效,但我找不到在 java 中的方法,我尝试了这个方法
String function= "x^2*sqrt(x^3)";
Pattern p = Pattern.compile("([a-z0-9]*)^([a-z0-9]*)");
Matcher m = p.matcher(function);
String out = function;
if(m.find())
{
System.out.println("GRUPO 0:" + m.group(0));
System.out.println("GRUPO 1:" + m.group(1));
out = m.replaceFirst("pow(" + m.group(0) + ", " + m.group(1) + ')');
}
String funcformat = out;
funcformat = funcformat.replaceAll("sqrt\\(([^)]*)\\)", "Math.sqrt($1)");
System.out.println("Return Value :"+ funcion );
System.out.print("Return Value :"+ funcformat );
但仍然不起作用,输出是:pow(x, )^2*Math.sqrt(x^3),正如我之前所说的,它应该是 pow(x,2)*Math.sqrt(pow(x,3))。
谢谢!!
【问题讨论】:
-
对于一般的数学表达式,写一个解析器来做。单独的 Java 正则表达式无法处理嵌套括号。对于这种特定情况,可以使用正则表达式,但我不推荐它。
-
同意正则表达式不是要走的路。那里有许多现有的解析器。你不必自己动手。
-
请注意您的输入字符串很奇怪:
"x^2*sqrt(3x)"你的意思是x^3吗? -
@nhahtdh 是的,已经更正了。
标签: java regex string math replace