Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

一部の正規表現にうまくマッチしてくれません

どれかに当てはまったらそれに対応するオブジェクトを生成したい
http://www.javaroad.jp/bbs/answer.jsp?
q_id=2015090322500113
の質問をした人です。
以下のように正規表現等を書いたのですが、
一部がうまくマッチされません。

private static Object[][] tokenList = {
        { "\\Q(\\E", Calc0.START_BRACKET },
        { "\\Q)\\E", Calc0.END_BRACKET },
        { "PI", Calc0.PI },
        { "-?[0-9]+(\\Q.\\E[0-9]+)?", Calc0.NUMBER },

        { "radius", Calc1.RADIUS },
        { "sin", Calc1.SIN },
        { "cos", Calc1.COS },
        { "tan", Calc1.TAN },
        { "r", Calc1.SQRT },

        { "\\Q*\\E", Calc2.MUL },
        { "/", Calc2.DIV },

        { "\\Q+\\E", Calc3.ADD },
        { "-", Calc3.SUB } };

public static ArrayList<Token> splitToken(String expr) {
    ArrayList<Token> tokenList = new ArrayList<>();
    for (int n = 0; n < expr.length();) {
        Token token = match(expr.substring(n));
        System.out.println(token);
        n += token.image.length();
        System.out.println(expr.substring(n));
    }
    return tokenList;
}


//出力結果
Token(START_BRACKET, "(")
1+2)*3
Token(END_BRACKET, ")")
+2)*3
Token(END_BRACKET, ")")
2)*3
Token(END_BRACKET, ")")
)*3
Token(END_BRACKET, ")")
*3
Token(NUMBER, "3")
3
Token(NUMBER, "3")

Token(NUMBER, "12.34")

Token(NUMBER, "-3")

Token(NUMBER, "1")
+1
Token(NUMBER, "1")
1
Token(NUMBER, "1")

どうすれば良いのでしょうか?

1

回答

4054

閲覧

1件の回答

評価

0

マッチしたかどうかの条件をいかに書き換えたらうまくいきました。
if (matcher.find() && matcher.start()==0) {

//(1+2)*3を入れた場合
Token(START_BRACKET, "(")
1+2)*3
Token(NUMBER, "1")
+2)*3
Token(ADD, "+")
2)*3
Token(NUMBER, "2")
)*3
Token(END_BRACKET, ")")
*3
Token(MUL, "*")
3
Token(NUMBER, "3")

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。