php:如何使用正则表达式匹配字符串中的多个字符

时间:2015-03-07 10:00:45

标签: php regex

给出该字符串

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

$ matches is

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 :(得分:1)

您需要按顺序使用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] => /
        )

)

答案 1 :(得分: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] => /
    )
)
*/