PHP: как сопоставить несколько символов в строке с помощью регулярных выражений

0

учитывая, что строка

$opStr = "1 + 2 - 3 * 4 / 5";
preg_match('/[\+\-\*\/]/', $strOp, $matches);

$ матчи

array (size=1)
    0 => string '+' (length=1)

в основном это соответствует первому операнду, есть ли способ узнать, содержит ли строка больше операнда, как в этом примере?

благодаря

ожидаемые результаты

case "1 + 1": $matches[0] = '+'
case "2 - 1": $matches[0] = '-'
case "1 + 2 - 3 * 4 / 5": $matches[0] = '+-+/'
or
case "1 + 2 - 3 * 4 / 5": $matches[0] = array('+', '-', '+', '/')
Теги:

2 ответа

0
Лучший ответ

Для выполнения глобального соответствия вам необходимо использовать preg_match_all.

preg_match_all('~[-+*/]~', $strOp, $matches);

DEMO

$re = "~[-+*/]~m";
$str = "1 + 2 - 3 * 4 / 5";
preg_match_all($re, $str, $matches);
print_r($matches);

Вывод:

Array
(
    [0] => Array
        (
            [0] => +
            [1] => -
            [2] => *
            [3] => /
        )

)
  • 0
    в этом случае я получаю 0 => строка '+ 1 *' (длина = 5), есть ли способ получить все операнды в массиве $ match? или в строке? Спасибо
  • 0
    опубликуйте ожидаемый результат в вашем вопросе.
Показать ещё 4 комментария
0

Просто используйте preg_match_all вместо preg_match.

<?php

$opStr = "1 + 2 - 3 * 4 / 5";
preg_match_all('/[\+\-\*\/]/', $opStr, $matches);

echo '<pre>';print_r($matches);echo '</pre>';

## will produce:
/*
Array
(
    [0] => Array
    (
        [0] => +
        [1] => -
        [2] => *
        [3] => /
    )
)
*/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню