Как определить, является ли строка математическим утверждением в PHP? - PullRequest
4 голосов
/ 22 марта 2012

У меня есть эта строка для экземпляра:

"2 + 2 - 2" и при оценке она должна вернуть int(2);

Я ищу функцию / парсер, которая может определить, есть ли кто-нибудьматематического содержания сопоставляется в строке.Больше примеров:

"(2 + 2) / 2"
"(4 / 8) * 12"
"128 * 8"

Не нужно оценивать и вычислять эти выражения Math, просто нужна функция, которая определит (True/False возвращаемые значения), если оператор такого рода Math.

Возможно ли это с помощью регулярных выражений или еще чего-нибудь?Спасибо!

Ответы [ 4 ]

1 голос
/ 22 марта 2012

Может быть, запустить его как php во время выполнения и проверить, что отвечающее значение возвращается как числовое.Взгляните на это.http://php.net/manual/en/function.eval.php

0 голосов
/ 22 марта 2012

Вы можете использовать генератор парсеров из XP-framework. См. пример грамматики для калькулятора, который можно перевести в код PHP.

0 голосов
/ 22 марта 2012

Если вы знаете, какой тип выражения вы будете анализировать, вы можете попробовать использовать регулярные выражения.Что-то вроде ^\d+\s*(\+|-|\*|\\)\s*\d+ должно давать значение true, если вы пытаетесь проверить бинарные операторы +, *, - и \.Таким образом, он будет проверять такие элементы, как 3 + 3, 2 - 0 и т. Д.

0 голосов
/ 22 марта 2012

См. eval . Например, вы можете сделать это:

$result = INF;
try { 
  eval("$result=" + myMathExpression);  // Evaluate here
} catch (Exception $e) { 

} 
if($result != INF) echo("Expression is a valid mathematical expression.");

Только будьте осторожны, потому что любой код PHP будет оцениваться!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...