Как разбить несколько чисел и математический оператор в PHP? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь создать функцию, которая принимает строку (содержит простое математическое выражение), а затем разбивает каждую из частей в виде массива.

Например, ввод 2 + 3 * 7 или 2 – 5 / 3.4, вывод должен быть таким, как ["2", "+", "3", "*", "7"] и ["2", "-", "5", "/", "3.4"]

Вот мои коды:

$input = "2 + 3 * 7";
$input = "2-5/3.4";

function splitExpression($string) {
    $result = explode (" ", $input);
    print_r ($result);
}

Использование только взрыва, конечно, первый пример работает хорошо, но не совпадает с другим.

Ответы [ 3 ]

1 голос
/ 30 апреля 2019

вы можете использовать регулярное выражение:

$matches = array();
$input="2 + 3 * 7 / 5 - 3";
preg_match_all("/\d+|[\\+\\-\\/\\*]/",$input,$matches);

это регулярное выражение ищет число или оператор и помещает совпадения в $ совпадения.Вы можете редактировать дизайн массива совпадений с помощью флагов.

matches:
 + 0
     - 0 : 2
     - 1 : +
     - 2 : 3
     - 3 : *
     - 4 : 7
     - 5 : /
     - 6 : 5
     - 7 : -
     - 8 : 3
1 голос
/ 30 апреля 2019

Вы можете попробовать вот так - на основе ответа в другом месте в стеке .Модифицировал шаблон и добавил preg_replace, чтобы на результаты не влияли пробелы во входной строке.

<code>$input = '2 + 3 * 7';
$input = '2-5/3.4';


$pttn='@([-/+\*])@';
$out=preg_split( $pttn, preg_replace( '@\s@', '', $input ), -1, PREG_SPLIT_DELIM_CAPTURE );

printf('<pre>%s
', print_r ($ out, true));

Будет выводить:

Array
(
    [0] => 2
    [1] => -
    [2] => 5
    [3] => /
    [4] => 3.4
)

Обновление:

<code>$input = '2 + 5 - 4 / 2.6';


$pttn='+-/*';   # standard mathematical operators
$pttn=sprintf( '@([%s])@', preg_quote( $pttn ) ); # an escaped/quoted pattern

$out=preg_split( $pttn, preg_replace( '@\s@', '', $input ), -1, PREG_SPLIT_DELIM_CAPTURE );

printf('<pre>%s
', print_r ($ out, true));

выходы:

Array
(
    [0] => 2
    [1] => +
    [2] => 5
    [3] => -
    [4] => 4
    [5] => /
    [6] => 2.6
)
0 голосов
/ 30 апреля 2019

Вы можете использовать str_split () для него. подобно str_split($str1);

$input = "2-5/3.4";
$input = "2 + 3 * 7";

function splitExpression($string) {
    //$result = str_split (string);
    $result = str_split (preg_replace('/\s+/', '', $string));
    return $result;
}
$arr1 = splitExpression($input);

Где preg_replace('/\s+/', '', $string) используется для удаления пробелов из строки.

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