Оставит слова в строке равно N символов ?

Тема в разделе "Регулярные выражения", создана пользователем usergeyv, 30 сен 2018.

  1. usergeyv

    usergeyv Постоялец

    Регистр.:
    5 июл 2013
    Сообщения:
    120
    Симпатии:
    20
    Хочу оставить слова(цифры, енг,рус) в строке равно 4, остальные вырезать или заменить пробелом,
    делаю
    PHP:
    $new_test preg_replace('/(?<=\s)(\S{1,3}|\S{5,})(?=\s)/''  '$new_test);
    но оставляет короткие, может есть иное решения не используя preg_replace?
     
  2. usergeyv

    usergeyv Постоялец

    Регистр.:
    5 июл 2013
    Сообщения:
    120
    Симпатии:
    20
    вот так работает
    Код:
    $new_test = preg_replace('/(?<=\s)(\S{1,3}|\S{5,})(?=\s)/u', ' ', $new_test);
    правильно это?
     
  3. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    252
    Симпатии:
    324
    На случай если вокруг слова не окажется пробелов (слово в самом начале или в самом конце строки)
    (?<=\s) и (?=\s) заменить на (?<!\S) и (?!\S).
    Код:
    $new_test = preg_replace('/(?<!\S)(\S{1,3}|\S{5,})(?!\S)/u', ' ', $new_test);
    Ещё вариант:
    Код:
    $new_test = preg_replace('/(?<!\S)\S{1,3}+(\S\S+|(?!\S))/u', ' ', $new_test);
     
    usergeyv нравится это.