Нужна помощь в регулярке сокрей всего

[Удален]
656

Ребят дело такое, есть куча текста, вот решил сделать форматирование, так сказать. Текст без тегов. Возможно ли сделать так:

1. определить конец предложения

2. после каждых например 200 символов вставить тег <br>, но! если по достижению 200 символов не обнаружено конца предложения, то тег ставится в конце последнего предложения.

DI
На сайте с 03.01.2007
Offline
123
#1

Раньше я такое делал с помощью substr и strstr (отрезаешь 200 символов, ищешь первое вхождение '. ', заменяешь на '.<br> ', идешь дальше по циклу, склеивая за собой куски) :)

Регуляркой никогда не пробовал, поэтому смогу сделать только экспериментальным путем, но времени нет столько сейчас... Смысл где-то рядом:

preg_replace($pattern, $replacement, $string);

$pattern = "/(.+?){200,}\.\s/is";
$replacement = "\${1}.<br> ";

Т.е. ищем после 200-го любого символа точку с пробелом и заменяем найденное + точка с <br> и пробелом.

За синтаксис совершенно не ручаюсь, пытался передать смысл, а не работающую регулярку ;)

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
zhidronsss
На сайте с 12.10.2007
Offline
36
#2

Поразмял мозк, сделал универсальный вариант.

insert_br("текст", сколько отступить, "чего вставить");

<?

echo insert_br($text,200,"<br>");

function insert_br($text,$start,$metka)
{

$len_text=strlen($text);//длинна текста
$text_kusok=substr($text, $start, ($len_text-$start));//кусок 2-й текста
$len_text_kusok=strlen($text_kusok);//длинна второго куска
$poz_tchk=strpos($text_kusok, ".");//ближайшая точка во втором куске
$text_kusok_do_tchk=substr($text, 0, ($start+$poz_tchk+1));//кусок до точки
$text_kusok_posle_tchk=substr($text, ($start+$poz_tchk+1), ($len_text-$start-$poz_tchk-1));//кусок после точки +1-сдивиг на 1 символ (.)
return $text_kusok_do_tchk.$metka.$text_kusok_posle_tchk;
}
?>
[Удален]
#3

Спасибо ребята, буду разбираться.

zhidronsss
На сайте с 12.10.2007
Offline
36
#4

Уплотним :)

<?


function insert_br($text,$start,$metka)
{
return substr($text, 0, ($start+strpos(substr($text, $start, (strlen($text)-$start)), ".")+1)).$metka.substr($text, ($start+strpos(substr($text, $start, (strlen($text)-$start)), ".")+1), (strlen($text)-$start-strpos(substr($text, $start, (strlen($text)-$start)), ".")-1));
}

?>
[Удален]
#5

Ну собственно решилась проблема, дабы оказались в базе \n

вот небольшую функцию написал )) может кому пригодится:


function clean($text){
$result = strip_tags($text);
$result = str_replace('<p></p>', '', '<p>' . preg_replace('#([\r\n]\s*?[\r\n]){2,}#', '</p>$0<p>', $result) . '</p>');
$result = str_replace("\n", "<br /><br />", $result);
return $result;
}
[Удален]
#6

Ребята, снова появилась данная проблема, решил воспользоваться приведенным примером zhidronsss, но весь моск сломал уже, как сделать циклом чтобы весь текст обработало, никак не получается (

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий