1

このコードは、文字列をテストと文字列を含む配列に分割します。

$str = 'test string';
$arr = preg_split('/\s+/', $str);

しかし、引用符を検出し、分割時にそれらの間のテキストを無視したいです。たとえば、次のようになります。

$str = 'test "Two words"';

これは、2 つの要素を持つ配列も返す必要がtestありTwo wordsます。

可能であれば、別の形式:

$str = 'test=Two Words';

したがって、等号がスペースの前にある場合、文字列は で分割する必要が=あります。それ以外の場合は、上記の他の規則が適用されます。

では、preg_split でこれを行うにはどうすればよいでしょうか。

4

2 に答える 2

1

試してくださいstr_getcsv

print_r(str_getcsv('test string'," "));
print_r(str_getcsv('test "Two words"'," "));
print_r(str_getcsv('test=Two Words',"="));

出力

Array
(
    [0] => test
    [1] => string
)
Array
(
    [0] => test
    [1] => Two words
)
Array
(
    [0] => test
    [1] => Two Words
)

preg_matchスペースの前に等号が存在するかどうかを確認し、使用する区切り文字を決定するようなものを使用できます。

ただし、PHP>=5.3 でのみ動作します。

于 2012-12-05T04:32:31.430 に答える
1

これは正規表現で実行できると確信していますが、文字列を引用符で分割し、次にスペースで分割して、explode?

文字列 が与えられた場合、'I am a string "with an embedded" string'最初に引用符で分割して を取得し['I am a string', 'with an embedded', 'string']、次に配列内の他のすべての要素を調べてスペースで分割すると、 が得られ['I', 'am', 'a', 'string', 'with an embedded', 'string']ます。

これを行うための正確なコードは、おそらく自分で書くことができます。そうでない場合は、お知らせください。お手伝いします。

最後の例では、等号で分割するだけです:

$str = 'test=Two Words';
print explode('=', $str);
于 2012-12-05T04:35:23.643 に答える