0

正規表現が本当に苦手です、事前に申し訳ありません!

文字列を2つの区切り文字を含む配列に分割し、それでも1つをキャプチャして最終的な配列に含める方法を見つけるために、最善を尽くしました。preg_splitこれには理想的なようですが、私の正規表現は私をがっかりさせています。

たとえば、私は文字列を持っていますfoo = bar AND bar=foo; 文字列をスペースまたは文字のいずれかで分割したいのですが、配列が次=のようになるように保持します。=

Array
(
    [0] => foo
    [1] => =
    [2] => bar
    [3] => AND
    [4] => bar
    [5] => =
    [6] => foo
)

残念ながら、私はこれを取得しています:

Array
(
    [0] => foo
    [1] => 
    [2] => =
    [3] => 
    [4] => bar
    [5] => AND
    [6] => bar
    [7] => =
    [8] => foo
)

私はこのコード(PHPで)でここにあります:

<!doctype html>
<?php

$string = 'foo = bar AND bar=foo';

$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

?>
<pre>
<?php

print_r($array);

?>
</pre>

皆さんの助けを本当に感謝します、みんなに感謝します!

4

2 に答える 2

1

PREG_SPLIT_NO_EMPTYフラグを追加します。

$string = 'foo = bar AND bar=foo';
$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

さて、これは出力します

Array
(
    [0] => foo
    [1] => =
    [2] => bar
    [3] => AND
    [4] => bar
    [5] => =
    [6] => foo
)
于 2012-08-08T14:59:59.063 に答える
1

PREG_SPLIT_NO_EMPTY「空の」一致を核攻撃するために使用します。

$array = preg_split('/ +|(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

または、空の一致が生成されないように正規表現を変更します。

$array = preg_split('/ +|(?<!\G)(=)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
于 2012-08-08T15:06:34.723 に答える