например, у меня есть такие сообщения:
$text = "word, word wd word!..";
Мне нужен массив вроде этого
Array ( [0] => word [1] => word [2] => wd [3] => word". )
Я очень новичок в регулярном выражении.
Вот что я пробовал:
function divide_a_sentence_into_words($text){ return preg_split('/(?<=[\s])(?<!f\s)\s+/ix', $text, -1, PREG_SPLIT_NO_EMPTY); }
это
$text = "word word, wd word!.."; $split = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $text, -1, PREG_SPLIT_NO_EMPTY); print_r($split);
работает, но у меня есть второй вопрос, я хочу написать список в mu regular exppression «wd» – это особый случай .. например, это мои слова «wd», «mr.», «dr.»
если я возьму текст:
$ text = "word, dr. word wd word! ..";
Мне нужен массив:
Array ( [0] => word [1] => dr. [2] => word [3] => wd [4] => word )
Извините за плохой английский…
Используйте функцию explode, которая разделит строку на массив
$words = explode(" ", $text);
использование
str_word_count ( string $string [, int $format = 0 [, string $charlist ]] )
см. здесь http://php.net/manual/en/function.str-word-count.php, он делает именно то, что вы хотите. Итак, в вашем случае:
$myarray = str_word_count ($text,1);
Использование preg_split
с регулярным выражением /[^\w]*([\s]+[^\w]*|$)/
должно работать нормально:
<?php $text = "word word wd word!.."; $split = preg_split("/[^\w]*([\s]+[^\w]*|$)/", $text, -1, PREG_SPLIT_NO_EMPTY); print_r($split); ?>
DEMO
Вывод:
Array ( [0] => word [1] => word [2] => wd [3] => word )