3

preg_splitPHPの関数に問題があります

私の正規表現は

#^(-?[0-9]+)(([+x])(-?[0-9]+))*$#

たとえば、変換したい:

-5+69x45

このような配列で

{
[0] = -5
[1] = +
[2] = 69
[3] = x
[4] = 45
}

preg_matchを使用した正規表現の作業と数学

しかし、preg splitでは、配列がありません

フラグのない空の配列がありますまたは

{
[0] = -5
[1] = x
[2] = 45
}

フラグ付きPREG_SPLIT_DELIM_CAPTURE

私のエラーはどこにありますか?

4

2 に答える 2

1

あなたの誤解だと思いますpreg_split

定義したパターンは文字列を分割するために使用されますが、これは、パターンと一致する文字列の部分が結果の配列に含まれないことを意味します。

フラグを使用することによりPREG_SPLIT_DELIM_CAPTURE、キャプチャグループのコンテンツが結果の配列に追加されます(preg_spit doc)。

#^(-?[0-9]+)(([+x])(-?[0-9]+))*$#
            ^^^^^^^^^^^^^^^^^^

ただし、最後の2つのグループの周りに数量詞があります。つまり、$2と$3は保存された最後の一致のみであり、このグループの最初の一致は「+69」が上書きされるため、次のようになります。

$1 = -5
$2 = x
$3 = 45
于 2012-02-13T15:20:43.053 に答える
1

次のコードを使用できます。

$str = '-5+69x45';
$arr = 
 preg_split('#([+x]|-?\d+)#', $str, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY );
print_r($arr);

出力:

Array
(
    [0] => -5
    [1] => +
    [2] => 69
    [3] => x
    [4] => 45
)
于 2012-02-13T15:35:35.993 に答える