Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Удаление одиночных символов


Автор: stalker2000 5.5.2015, 10:06
Приветствую. Простейшая вроде бы задача: удалить из текста все одиночные символы. Пишу:
Код

$s = 'Curabitur semper, ex ut congue 1 2 3 4 aliquam, elit lacus rhoncus ligula, sed interdum lectus risus nec est.
Nullam sit amet cursus magna. Donec erat a b c d e f sapien, laoreet hendrerit consectetur, gravida justo.';

echo $s, '<br><br>', preg_replace('/\s+(.{1})\s+/', ' ', $s);

получаю удаление искомых символов через один:
Код

Curabitur semper, ex ut congue 2 4 aliquam, elit lacus rhoncus ligula, sed interdum lectus risus nec est.
Nullam sit amet cursus magna. Donec erat b d f sapien, laoreet hendrerit consectetur, gravida justo.

Я так понимаю, проблема в захвате пробелов, но как её обойти?  smile 

Автор: ksnk 5.5.2015, 11:02
Дык! Замена по регулярке работает примерно так - ищется первое совпадение по регулярке, потом от первого символа, не попавшего в регулярку, поиск с заменой повторяются. Тоесть если есть несколько одиночных символов - будет заменятося каждый 2-й.

Нужно использовать http://php.net/manual/ru/regexp.reference.assertions.php.
Например - так 
Код

echo $s, '<br><br>', preg_replace('/\s+(.{1})(?=\s)/', ' ', $s);

Автор: stalker2000 5.5.2015, 11:36
О, пасиб, не знал что есть такая штука. Век живи, век учись  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)