正規表現と長い文字列を使用したスタック オーバーフロー エラーに関する投稿がすでにいくつかあることは知っていますが、それらは役に立たず、私のタイプの解析の問題にはまったく関係ありませんでした。
数学関数から括弧内の文字列を見つけようとするだけです。
funktionsstring
=SIN(3.141592653589793238462643383279502884197169399375105820974944592307816406
286208998628034825342117067982148086513282306647093844609550582231725359408
12848111745028410270193852110555964462294895493038196);
次のコードをパターンで使用して、括弧内にある文字列 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)
スタックオーバーフローの原因と思われる反復を防ぐために、何らかの方法でパターンを改善できるかどうかわかりません。明らかに、分割機能はここでは機能しません。
また、文字列が非常に長いため、文字として n\ を許可したいと思います。科学的な理由から、少なくとも 100 から 1000 の正確な 10 進数を取得するために、(apfloat を使用して) 大きな 10 進数で一般的に作業したいのですが、正規表現でパターンを変更し続けることは可能ですか?
そうでない場合、どのように正規表現を書き直す必要がありますか?
より良いツールはありますか?