чтобы везде по тексту повторяющиеся пробелы менялись на 1 пробел, за исключением того, что содержится в определенном теге (внутри тега могут находиться еще и другие теги),
например:
<p>text text text text text</p> - здесь пробелы заменяются
<no><p>text text text text text</p></no> - здесь все остается, как есть
Спустя 19 минут, 41 секунда (4.10.2010 - 17:06) DedMorozzz написал(а):
<?php
$a ="<p>text text text text text</p> - здесь пробелы заменяются <no><p>test test test test test</p></no> <p>text text text text text</p>";
$a=preg_replace_callback('#(.*?)(<no>.*?</no>)(.*)#',create_function('$matches','
$a=preg_replace(\'# #\',\'\',$matches[1]);
$a .= $matches[2];
$a .= preg_replace(\'# #\',\'\',$matches[3]);
return $a;
'),$a);
echo $a;
?>
Спустя 2 часа, 13 минут, 5 секунд (4.10.2010 - 19:19) arvitaly написал(а):
дед мороз у тебя заменяются все пробелы а надо только повторяющиеся
Спустя 21 час, 56 минут, 33 секунды (5.10.2010 - 17:16) azait написал(а):
в приведенном примере не работает, если в тексте будет несколько блоков <no></no>
обрабатывается только первый
проблема актуальна...
обрабатывается только первый
проблема актуальна...
Спустя 21 минута, 43 секунды (5.10.2010 - 17:38) DedMorozzz написал(а):
Цитата (arvitaly @ 4.10.2010 - 18:19) |
дед мороз у тебя заменяются все пробелы а надо только повторяющиеся |
ну это решаеться 1м действием
А что касаемо многих тегов - тут уже разбивай на массивы, каждый элемент массива обрабатывай, далее конкатенируй.
Или же сперва узнать кол-во тегов, в которых нету обработки и поставить это кол-во в повторение шаблона + последний остаточный.
Если не понял как - напишу.
Спустя 24 минуты, 6 секунд (5.10.2010 - 18:02) arvitaly написал(а):
<?php
$str = " 11 1111<no>222 2222</no>3333 33<no> 3</no>44444 44 ";
$symbol = " ";
$tag = "no";
$i = -1;
$oldi = 0;
$dstr = preg_split("~(" . $symbol . "+)~", $str, 0, PREG_SPLIT_DELIM_CAPTURE);
$newstr = '';
for ($i = 0; $i < count($dstr)-1; $i++)
{
$newstr .= $dstr[$i];
if ( preg_match("~^(?:(?:(?!<" . $tag . ">).)*<" . $tag . ">(?:(?!<" . $tag . "></" . $tag . ">).)*</" . $tag . ">(?:(?!<" . $tag . "></" . $tag . ">).)*|(?:(?!<" . $tag . ">).)*)$~Usi", $dstr[$i]))
{
$newstr .= $symbol;
}
else
{
$newstr .= $dstr[$i+1];
}
$i++;
}
echo $newstr;
?>
Вместо смайлов - двоеточие скобка
Цитата |
ну это решаеться 1м действием |
Согласен, но когда проверяешь сначала запускаешь смотришь работает или нет, а потом уже если работает - смотришь код
Спустя 13 часов, 45 минут, 25 секунд (6.10.2010 - 07:47) azait написал(а):
огромное спасибо - очень помогли