テキストをピリオドに分割するこの単純なパターンがあります。
$text = preg_split("/[\.:!\?]+/", $text);
しかし、配列項目を含める. :
か、最後に入れたいと思います。!
つまり、今は「good:news.everyone!」です。私は持っています:
array("good", "news", "everyone", "");
でも私はしたい:
array("good:", "news.", "everyone!", "");
テキストをピリオドに分割するこの単純なパターンがあります。
$text = preg_split("/[\.:!\?]+/", $text);
しかし、配列項目を含める. :
か、最後に入れたいと思います。!
つまり、今は「good:news.everyone!」です。私は持っています:
array("good", "news", "everyone", "");
でも私はしたい:
array("good:", "news.", "everyone!", "");
どうぞ:
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!'
);
パターンでポジティブルックビハインド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を使用してテストできます。