проблема в определении регулярного выражения - PullRequest
0 голосов
/ 28 мая 2010

Как определить регулярное выражение математического выражения. Пожалуйста, определите общее регулярное выражение для

5+4
5-3
5*6
6/2

Ответы [ 3 ]

4 голосов
/ 28 мая 2010

Хорошо, вот тот, который может быть немного сложнее, чем нужно (эй, это регулярное выражение!)

/^\s*-?\d+(?:\.\d+)?(?:\s*[+*\/\-]\s*-?\d+(?:\.\d+)?)+(?:\s*=\s*-?\d+(?:\.\d+)?)?$/

Он допускает одну или несколько операций, десятичные числа и, необязательно, часть "равно" в конце.

5 + 7
3 * 2 - 8
80.31 + 12 / 6
5 * 7 - 2 = 33
0 голосов
/ 28 мая 2010

Спецификация нечеткая, но вот читаемое регулярное выражение, использующее мета-регулярное выражение в Java.

    String regex =
        "num(?:opnum)*"
            .replace("op", "\\s*[*/+-]\\s*")
            .replace("num", "\\s*[+-]?\\d+(?:\\.\\d+)?\\s*");
    String[] tests = {
        "5+4",          // true
        "5 - 3",        // true
        "5 * 6 - 4",    // true
        "3.14159 = 0",  // true
        "A = B",        // false
        "5+ -4",        // true
        "5 * +4",       // true
        "5++5",         // true
        "5+++5",        // false
        "5+5+"          // false
    };
    for (String test : tests) {
        System.out.println(test + " " + test.matches(regex));
    }

Числа могут включать необязательную десятичную часть и знак +/-. Там может быть несколько равенств.

0 голосов
/ 28 мая 2010
^\d+[+*\-/]\d+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...