在Pattern对象中为java字符串设置正则表达式

时间:2017-01-24 02:40:32

标签: java regex string matcher

我试图在java字符串中获取所有匹配项。匹配必须是数学方程式中的基数和幂。如您所知,基数和权力也可能是负数和小数。我有模式,正则表达式和匹配器设置。它看起来像这样,但它没有给我我期望的东西。我在StackOverflow Regex to find integer or decimal from a string in java in a single group?

上通过这篇文章引导自己

我真的只想捕捉具有负整数和非整数指数的权力。

这是我的代码:

String ss = "2.5(4x+3)-2.548^-3.654=-14^-2.545";
String regex = "(\\d^+(?:\\d+)?)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(ss);

while(m.find()){
        System.out.println("Wiwi the cat: "+m.group(1));
    }

此代码的输出无效。任何想法或建议都会很棒。

感谢

2 个答案:

答案 0 :(得分:1)

你的基本问题是这个角色:^。这意味着"开始输入",所以你的正则表达式无法匹配。

你必须逃避\^所以它变成了文字。

我还修复了你的正则表达式的其余部分:

String regex = "-?\\d+(\\.\\d*)?(\\^-?\\d+(\\.\\d*)?)?";

请参阅live demo

并使用

match.group(); // the whole match

答案 1 :(得分:0)

编辑:将[0123456789]替换为(\\d)

编辑编辑:添加了OP的上下文

答案

这是一个应该符合您需要的模式:

-?(\\d)+(\\.(\\d)+)?\\^-?(\\d)+(\\.(\\d)+)?

说明

-? - 零或一个减号

(\\d)+ - 一个或多个数字

(\\.(\\d)+)? - (可选)小数点,后跟一个或多个数字

\\^ - 一个插入符号

String.replace(pattern, "[FOUND]")生成的输入中使用此内容:

"2.5(4x+3)[FOUND]=[FOUND]"

在您的回答中,只需将您的regex替换为我发布的m.group(),然后使用m.group(1)代替String ss = "2.5(4x+3)-2.548^-3.654=-14^-2.545"; String regex = "-?(\\d)+(\\.(\\d)+)?\\^-?(\\d)+(\\.(\\d)+)?"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(ss); while(m.find()) { System.out.println("Wiwi the cat: " + m.group()); }

$scope

祝你好运!