Перед каждым словом [a-zа-я] поставить знак '+', для остальных добавить '>'

Необходимо обработать строку (UTF8) регулярным выражением по следующим правилам:

1) перед каждым словом, состоящим только из букв [a-zа-я] - поставить знак '+'

2) для остальных слов добавить в начало знак '>'

Словом будем считать любую последовательность символов, отделяемые пробелом, началом или концом строки. Для простоты считаем что все символы в строке в нижнем регистре.

Примеры:

1) "смартфон huawei p20 black sup7er" -> "+смартфон +huawei >p20 +black >sup7er"

2) "смартфон samsung x 20 412s" -> "+смартфон +samsung +x >20 >412s"

Кто это сделать?


Ответы (2 шт):

Автор решения: Gagablik
$text = 'смартфон samsung x 20 412s';
$words = explode(" ", $text);

$result = '';
foreach ($words as $value) {
    $result .= preg_match('/^[а-яa-z]+$/u', $value) ? '+'.$value.' ' : '>'.$value.' ';
}
$result = mb_substr($result, 0, -1);
→ Ссылка
Автор решения: Эдуард
$text = 'смартфон huawei p20 black sup7er
смартфон samsung x 20 412s';

$text = preg_replace(['~\b\pL+\b~u', '~\h+\K[^+][\pL\d]+~u'], ['+$0', '>$0'], $text);

echo $text; // +смартфон +huawei >p20 +black >sup7er +смартфон +samsung +x >20 >412s
→ Ссылка