テキストをピリオドに分割するこの単純なパターンがあります。
$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 => ''
);
_
結果with_PREG_SPLIT_NO_EMPTY
_フラグ:
_array (
0 => 'good:',
1 => 'news.',
2 => 'everyone!'
);
_
これを使用してテストできます PHP Online Function Tester 。