Регулярное выражение. Нужна помощь.

Astral Man

We Will Rock You
Регулярное выражение. Нужна помощь.

Есть строка
PHP:
$test = '
<body>
<html>
    <div>Первое предложение. <b>Второе</b> предложение.</div>
    <div>А это будет третье предложение. Типа четвертое предложение. Тут будет пятое.</div>
    <div>Вот здесь шестое предложение.</div>
</html>
</body>';
Нужно вернуть строку в которой минимум 50 символов текста не считая html теги и заканчивается точкой т.е.
PHP:
<body>
<html>
    <div>Первое предложение. <b>Второе</b> предложение.</div>
    <div>А это будет третье предложение.</div>
</html>
</body>
Как такое реализовать?
 

Astral Man

We Will Rock You
whirlwind
могут..
типа <div>Первое предложение. <b>Второе</b> предложение.</div>
 

whirlwind

TDD infected, paranoid
Ну тогда если ВСЕ предложения ГАРАНТИРОВАНО завершаются точкой, то считаем точку разделителем. Сплитим по точке, удаляем тэги, считаем длину: если да, то в буффер, нет - пропускаем.

Если предложения не все с точками, то возникает вопрос - что считать началом предложения? Если его решить, то дальше просто.
 

Celestialangel

Guest
<pre>
<?php

$test = '
<body>
<html>
<div>Первое предложение. Второе предложение.</div>
<div>А это будет третье предложение. Типа четвертое предложение. Тут будет пятое.</div>
<div>Вот здесь шестое предложение.</div>
</html>
</body>';


$test = strip_tags($test);
$arr = explode("\r\n",$test);
$arr2 = array();
for($i=0; $i!=count($arr); $i++)
{
$arr[$i]=trim($arr[$i]);
if(strlen($arr[$i])>50 and $arr[$i]!="") $arr2[]=$arr[$i]; // минимум или максимум??
}
print_r($arr2);
?>

-~{}~ 09.12.05 12:01:

как-то так, смотря что ты имел ввиду под минимумом))

-~{}~ 09.12.05 12:03:

плиз уточни что именно тебе нужно?
 

Astral Man

We Will Rock You
Предложение гарантировано заканчивается точкой.
Тэги удалять нельзя, они нужны в результате. Нужно взять минимум 50 символов текста, не считая тэги до первой точки т.е. конца предложения... оно может быть и 100 символов.
Смотрите первый пост.

Фанат
Верно, но с тэгами.
 

Celestialangel

Guest
"Нужно взять минимум 50 символов текста, не считая тэги до первой точки т.е. конца предложения..."
ничего не понял

-~{}~ 09.12.05 12:21:

дай примеры, а то сложно чем-то тебе помочь
 

whirlwind

TDD infected, paranoid
PHP:
$test = ' 
<body> 
<html> 
    <div>Первое предложение. <b>Второе</b> предложение.</div> 
    <div>А это будет третье предложение. <b>Типа</b> четвертое предложение. Тут будет пятое.</div> 
    <div>Вот здесь шестое предложение.</div> 
</html> 
</body>';




$t = split("\.",$test);
$sl = 0;
for ( $i = 0; $i < count($t); $i ++ ){
	echo "sl: $sl\n";

	$sl += strlen(preg_replace("/(\s){2,}/","\$1",strip_tags($t[$i]))) + 1;
	if ( $sl >= 50 ){
		echo join(".",array_slice($t,0,$i + 1 ) ),".\n\n";
		break;
	}
}
 

Astral Man

We Will Rock You
Celestialangel
Смотри первый пост.
минимум 50 символов заканчиваются на слове будет третьего предложения.

И мне нужно из этого
PHP:
test = '
<body>
<html>
    <div>Первое предложение. <b>Второе</b> предложение.</div>
    <div>А это будет третье предложение. Типа четвертое предложение. Тут будет пятое.</div>
    <div>Вот здесь шестое предложение.</div>
</html>
</body>';
получить
PHP:
<body>
<html>
    <div>Первое предложение. <b>Второе</b> предложение.</div>
    <div>А это будет[l](это 50й символ)[/l] третье предложение.</div>
</html>
</body>
это понятно?

-~{}~ 09.12.05 12:38:

whirlwind
Спасибо, почти что нужно... только как быть с закрывающими тэгами?
 

whirlwind

TDD infected, paranoid
А никак. Если внутри предложения могут быть теги. Определите, что является содержательной частью, а что обязательным оформлением, и внешним регэкспом выделите.
 

uninside

Новичок
а как же это?
Код:
string strip_tags (string str [, string allowable_tags])

Эта функция пытается вернуть строку str с вырезанными тэгами HTML и PHP.
 
Сверху