@ruslanbm29

PHP разбить текст на слова, вернуть слова и делители?

Нужно разбить текст на слова и элементы. explode не подойдет.
Нужна регулярка для spliti или preg_split ну или другие варианты...

$text_arr = preg_split("/[\n\r\s,?.!]+/", $text); - в принципи делит как надо, но в массив не возвращаются сами делители (точки,запятые,знаки вопроса). А мне нужен массив и с самими делителями кроме пробелов.

Допустим есть строка
"МАЗ 5551 - популярный белорусский грузовик-самосвал, с самосвальным оборудованием. Он выпускается на минском автомобильном заводе!"

Нужно получить массив
[0] => МАЗ 
[1] => 5551 
[2] => -
[3] => популярный 
[4] => белорусский 
[5] => грузовик 
[6] => ,
[7] => с
[8] => самосвальным 
[9] => оборудованием 
[10] => . 
[11] => Он
[12] => выпускается 
[13] => на 
[14] => минском 
[15] => автомобильном 
[16] => заводе 
[17] => !
  • Вопрос задан
  • 1269 просмотров
Решения вопроса 1
@user49981
$regex = "([а-яА-Яa-zA-Z0-9]*|[.,-_!?;:'\(\)\"]*)";
        $string = "МАЗ 5551 - популярный белорусский грузовик-самосвал, с самосвальным оборудованием. Он выпускается на минском автомобильном заводе!";
        preg_match_all("/$regex/", $string, $matches);
        $matches = $matches[1];
        array_walk($matches,  function ($value, $key) use (&$matches) {
            if(strlen($matches[$key]) < 1) {
                unset($matches[$key]);

            }
        });
        echo '<pre>';
        print_r($matches);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GomelHawk
@GomelHawk
PHP / Symfony developer
Можно немного проще:

$string = 'МАЗ 5551  ... ';
$result = \array_filter(
    \preg_split('/([\\s.,!-])/u', $string, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY),
    static function ($value) { return $value !== ' '; }
);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы