26

テキストをピリオドに分割するこの単純なパターンがあります。

$text = preg_split("/[\.:!\?]+/", $text);

しかし、配列項目を含める. :か、最後に入れたいと思います。!

つまり、今は「good:news.everyone!」です。私は持っています:

array("good", "news", "everyone", "");

でも私はしたい:

array("good:", "news.", "everyone!", "");
4

2 に答える 2

58

どうぞ:

preg_split('/([^.:!?]+[.:!?]+)/', 'good:news.everyone!', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

仕組み:パターンは実際にすべてを区切り文字に変換します。PREG_SPLIT_DELIM_CAPTURE次に、これらの区切り文字を配列に含めるために、定数を使用できます。これにより、次のような配列が返されます。

array (
    0 => '',
    1 => 'good:',
    2 => '',
    3 => 'news.',
    4 => '',
    5 => 'everyone!',
    6 => '',
);

空の値を取り除くには、を使用しますPREG_SPLIT_NO_EMPTY。これらの定数の2つ以上を組み合わせるには、ビット|演算子を使用します。結果:

array (
    0 => 'good:',
    1 => 'news.',
    2 => 'everyone!'
);
于 2012-08-01T11:59:58.390 に答える
10

パターンでポジティブルックビハインドPREG_SPLIT_DELIM_CAPTUREを使用する場合は使用できません。関数は区切り文字を保持します。

$text = preg_split('/(?<=[.:!?])/', 'good:news.everyone!', 0, PREG_SPLIT_NO_EMPTY);

を使用するlookbehindと、一致せずに文字を検索するだけです。したがって、の場合preg_split()、関数は文字を破棄しません。

フラグなし の結果:PREG_SPLIT_NO_EMPTY

array (
    0 => 'good:',
    1 => 'news.',
    2 => 'everyone!',
    3 => ''
);

フラグ付き の結果:PREG_SPLIT_NO_EMPTY

array (
    0 => 'good:',
    1 => 'news.',
    2 => 'everyone!'
);

このPHPOnlineFunctionTesterを使用してテストできます。

于 2016-07-05T17:21:49.663 に答える