[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: замена повторяющегося слова вподряд
olgatcpip
Здравствуйте, момоги пожалуйста.

есть текст , в нем нужно заменить несколько идущих сподряд   на один  
PHP
$search = array ("'(\&nbsp\;){2,}'");     
$replace = array (" ");
$modified_content=preg_replace($search,$replace,$modified_content);
вот так вообще не работает sad.gif



Спустя 21 минута, 32 секунды (21.10.2009 - 22:14) haZe написал(а):
Это нашел в мануале о preg_replace, не знаю оно или нет.
"'([\r\n])[\s]+'", // Вырезается пустое пространство

Полный листинг:
Свернутый текст
PHP
$search = array ("'<script[^>]*?>.*?</script>'si",  // Вырезается javascript
                 
"'<[\/\!]*?[^<>]*?>'si",           // Вырезаются html-тэги
                 
"'([\r\n])[\s]+'",                 // Вырезается пустое пространство
                 
"'&(quot|#34);'i",                 // Замещаются html-элементы
                 
"'&(amp|#38);'i",
                 
"'&(lt|#60);'i",
                 
"'&(gt|#62);'i",
                 
"'&(nbsp|#160);'i",
                 
"'&(iexcl|#161);'i",
                 
"'&(cent|#162);'i",
                 
"'&(pound|#163);'i",
                 
"'&(copy|#169);'i",
                 
"'&#(\d+);'e");                    // вычисляется как php

$replace = array ("",
                  
"",
                  
"\\1",
                  
"\"",
                  
"&",
                  
"<",
                  
">",
                  
" ",
                  
chr(161),
                  
chr(162),
                  
chr(163),
                  
chr(169),
                  
"chr(\\1)");

$text preg_replace ($search$replace$document);

Спустя 7 минут, 14 секунд (21.10.2009 - 22:21) olgatcpip написал(а):
haZe
это и я нашла, но &nbsp; - это разве "'([\r\n])[\s]+'" ?

Спустя 6 минут, 4 секунды (21.10.2009 - 22:27) kirik написал(а):
Цитата (olgatcpip @ 21.10.2009 - 14:21)
но &nbsp; - это разве "'([\r\n])[\s]+'" ?

Нет, &nbsp; - это html сушность, \s - пробельный символ.
PHP
$text '&nbsp;&nbsp;&nbsp;windows! &nbsp;   &nbsp; sucks!';
echo 
preg_replace('/(\s*&nbsp;\s*)+/''&nbsp;'$text);


UPD обновил паттерн..

Спустя 29 минут, 37 секунд (21.10.2009 - 22:57) olgatcpip написал(а):
kirik спасибо

Спустя 21 час, 52 минуты, 41 секунда (22.10.2009 - 20:49) krasilich написал(а):
ИМХО. я бы сделал через str_replace....

Спустя 49 минут, 24 секунды (22.10.2009 - 21:39) kirik написал(а):
Цитата (see_man @ 22.10.2009 - 12:49)
ИМХО. я бы сделал через str_replace....

Выкладывай решение smile.gif

Спустя 17 минут, 56 секунд (22.10.2009 - 21:57) krasilich написал(а):
хм, что-то не вчитался в задачу, беру свои слова обратно unsure.gif

Спустя 22 минуты, 24 секунды (22.10.2009 - 22:19) kirik написал(а):
Цитата (see_man @ 22.10.2009 - 13:57)
беру свои слова обратно

А зря smile.gif Решение точно есть. Пусть будет немного больше чем одна строчка, но зато альтернативное.

Спустя 2 минуты, 59 секунд (22.10.2009 - 22:22) krasilich написал(а):
я поэтому и не стал его приводить, потому что там куда больше чем одна строка, так что регулярное выражение - оптимальное средство)

Спустя 7 минут, 1 секунда (22.10.2009 - 22:29) krasilich написал(а):
Интересно, будет работать?=))))))
PHP
$arr = expolede('&nbsp', $string);
$str = implode('&nbsp', $arr);

Спустя 28 минут, 5 секунд (22.10.2009 - 22:57) kirik написал(а):
Цитата (see_man @ 22.10.2009 - 14:29)
Интересно, будет работать?

Как-то смысла нет.. Какой был на входе, такой же и будет на выходе..

Спустя 8 минут, 35 секунд (22.10.2009 - 23:06) glock18 написал(а):
а str_replace('&nbsp;&nbsp;', '&nbsp;', $str) ?

если не все уберает, то можно в цикле, пока строка не перестанет меняться.

Спустя 3 минуты, 40 секунд (22.10.2009 - 23:10) kirik написал(а):
glock18
Там еще с пробелами может быть:
Код
&nbsp;  &nbsp;   &nbsp;&nbsp;

Спустя 9 минут, 45 секунд (22.10.2009 - 23:19) krasilich написал(а):
Вот оно=))
PHP
    
$arr 
= explode('&nbsp', $str);
$nstr = '';
foreach ($arr as $value)
{
   if($value != '')
   $nstr .= $value.'&nbsp;';
}
echo $nstr;

Спустя 10 минут, 36 секунд (22.10.2009 - 23:30) glock18 написал(а):
kirik
ну тады можно
PHP
$str = htmlspecialchars_decode($str);
str_replace('  ', ' ', $str);


ну или наоборот (только encode амперсанды размножит, чтобы не множил нужно юзать с параметром "некодитьповторно", который только в 5.3 добавлен).

ЗЫ: ну или реплейсить это array('&nbsp;&nbsp;', ' '), array('&nbsp;', ' ');

Спустя 2 часа, 36 минут, 26 секунд (23.10.2009 - 02:06) twin написал(а):
Возьмите меня в общество извращенцев biggrin.gif
PHP
<?php 
$text 
'&nbsp;&nbsp;&nbsp;windows! &nbsp;   &nbsp; sucks!';
echo 
implode('&nbsp;'array_unique(explode(' 'str_replace('&nbsp;'' '$text))));


_____________
Ласковое слово и кошке приятно... Плюсик в карму сойдет wink.gif
*smarty дока - новая любовь
Моё рукотворение ругайте, хвалите smile.gif
Веду маленький блог
в этом блоге публикую новые работы
WMR217126627282 wink.gif

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.