与正则表达式解析堆栈溢出错误

我知道,已是有关与正则表达式和长串的堆栈溢出错误一些贴子,但他们并没有帮助我,关心从来没有我喜欢的类型解析问题。

我只是试图从一个数学函数如发现括号中的字符串

funktionsstring =SIN(3.141592653589793238462643383279502884197169399375105820974944592307816406 286208998628034825342117067982148086513282306647093844609550582231725359408 12848111745028410270193852110555964462294895493038196);

使用以下代码用图案找到字符串x即括号例如。 ( X ) :

Pattern pattern = Pattern.compile("\\([^(]*?\\)"); Matcher matcher = pattern.matcher(funktionsstring);

我得到以下错误

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at java.util.regex.Pattern.bitsOrSingle(Pattern.java:2553) at java.util.regex.Pattern.range(Pattern.java:2601) at java.util.regex.Pattern.clazz(Pattern.java:2507) at java.util.regex.Pattern.sequence(Pattern.java:2030) at java.util.regex.Pattern.expr(Pattern.java:1964) at java.util.regex.Pattern.compile(Pattern.java:1665) at java.util.regex.Pattern.<init>(Pattern.java:1337) at java.util.regex.Pattern.compile(Pattern.java:1022) at classes.Parser.Klammerauswertung(Parser.java:104) at classes.Parser.Klammerauswertung(Parser.java:119) at classes.Parser.Klammerauswertung(Parser.java:119)

我不明白,如果我能改善某些方法来防止重复这似乎导致堆栈溢出的模式。 显然,拆分功能不能在这里工作。

此外 - 作为字符串很长 - 我想允许ñ\作为字符。 我想(apfloat使用),以获得科学的原因,至少有一些100到1000确切小数,是有可能保持正则表达式变着花样一般大的十进制数工作?

如果不是,我怎么重新编写正则表达式?

有没有更好的工具吗?

--------------解决方案-------------

SIN\((\d+\.?\d*)\)

实时编辑在Debuggex

我编辑,使之与小数的数字。 代替随机.和数字。

(?:SIN|COS|TAN)\(([-]?\d+\.?\d*\^?\d*)\)

与正则表达式解析堆栈溢出错误


实时编辑在Debuggex

这允许功能正弦,余弦或黄褐色至用于添加更多的功能只需添加一个|{functionname}在开始。 此外,它可以是具有指数为负值。

或者你可以有

.+\(([-]?\d+\.?\d*\^?\d*)\)

与正则表达式解析堆栈溢出错误

实时编辑在Debuggex

这将允许对任何在前面()

我不太明白你想要什么* - /我的建议是,你让独立的正则表达式的每个功能,因此您可以不同的方式处理它们。

分类:java的 时间:2015-03-15 人气:1
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.801 (s). 10 q(s)