Как удалить лишнее, RegExp?

Статус
В этой теме нельзя размещать новые ответы.

Tima111

Читатель
Заблокирован
Регистрация
5 Июл 2007
Сообщения
218
Реакции
488
  • Автор темы
  • Заблокирован
  • #1
PHP:
<?php
$text="Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Текст текст текст.";
?>
На выходе нужно:
Код:
Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
Нужно чтобы удалились <br>&nbsp;&nbsp;&nbsp; и больше &nbsp; после которых нету букв...
И чтобы заменилось
Код:
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Текст текст текст.
на
Код:
<br>&nbsp;&nbsp;&nbsp;Текст текст текст.
 
1. убрать пустые &nbsp;
PHP:
preg_replace('$<br>(&nbsp;){3,}\s+?\r\n$', '', $text);
2.убрать лишние &nbsp (более 3);
PHP:
preg_replace('$(&nbsp;){4,}$', '&nbsp;&nbsp;&nbsp;', $text);

UPD
или не надо амперсанды эскейпить... не помню. лень смотреть

UPD2
Не надо, поправил. Поправил что в 1-м случае заменяется только пустая строка с тремя и более пробелами

и все за один раз
PHP:
preg_replace('$(<br>(&nbsp;)+\s*\r\n)|((?:(?<=((&nbsp;){3}))&nbsp;)+\s*)$', '', $text);
 
  • Автор темы
  • Заблокирован
  • #3
antidote, огромное спасибо :thenks: работает :ay:
Вот ещё проблема:
PHP:
<?php 
$text="Текст текст текст. 
<br>&nbsp;&nbsp; Текст текст текст. 
<br>&nbsp;&nbsp; Текст текст текст. 
<br>&nbsp;&nbsp; Текст
<br>&nbsp;&nbsp; Текст текст текст. 
<br>&nbsp;&nbsp; Текст
<br>&nbsp;&nbsp; Текст текст текст. 
<br>&nbsp;&nbsp; Текст
<br>&nbsp;&nbsp; Текст текст текст."; 
?>

На выходе нужно:
Код:
Текст текст текст. 
<br>&nbsp;&nbsp; Текст текст текст. 
<br>&nbsp;&nbsp; Текст текст текст. 
<br>&nbsp;&nbsp; Текст текст текст. 
<br>&nbsp;&nbsp; Текст текст текст. 
<br>&nbsp;&nbsp; Текст текст текст.

Надо чтобы удалились строки, которые начинаются на
Код:
<br>&nbsp;&nbsp;
и в которых нет точки. Только в конце каждой строки может быть точка, а потом пробел (как в примере) - это удалять не нужно.
Или это только через explode и проверку вхождения точки в каждой строке можно реализовать?
 
Как-нибудь так попробуйте
PHP:
preg_replace('$<br>(&nbsp;){2}\s*[^\.?:(?!(\.))]+\s?\r\n$', '', $text);
или все вместе с предыдующим куском
PHP:
preg_replace('$(<br>(&nbsp;){3,}\s*\r\n)|((?:(?<=((&nbsp;){3}))&nbsp;)+\s*)|(<br>(&nbsp;){2}\s*[^\.?:(?!(\.))]+\s*\r\n)$', '', $text);
 
  • Автор темы
  • Заблокирован
  • #5
antidote, огромное спасибо за помощь :thenks:
Но регулярное выражение как-то не так работает, там где есть двоеточия, строка не удаляется.
Сделал через explode, но теперь понял что это тоже не верно, ведь есть предложения где есть и восклицательный знак и вопросительный, их тоже не надо удалять.
Хотя можно пропустить вообще через несколько проверок и на восклицательный и на вопросительный знак, но тогда совсем медленно будет работать :(

PHP:
<?php
$text="<br>&nbsp;&nbsp; Текст текст текст.
<br>&nbsp;&nbsp; Текст текст текст!
<br>&nbsp;&nbsp; Текст текст текст? 
<br>&nbsp;&nbsp; Текст: текст 
<br>&nbsp;&nbsp; Текст: текст!";

$exp=explode("
", $text);
$text="";
for ($i=0; $i<=count($exp); $i++) {
if ((substr_count($exp[$i],"."))>0) {$text=$text.$exp[$i];}
				}
echo $text;
?>

Нужно чтобы в переменной текст осталось:
Код:
<br>&nbsp;&nbsp; Текст текст текст.
<br>&nbsp;&nbsp; Текст текст текст!
<br>&nbsp;&nbsp; Текст текст текст? 
<br>&nbsp;&nbsp; Текст: текст!

Может можно через регулярное выражение сделать?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху