Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Учебники регулярных выражений
 
Кто сможет составить выражение для такого случая:

Код:
 
<table border=0>
<tr>
   <td>blablablabla<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table></td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Нужно удалить из этого всего кусок "<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table>". Иными словами нужно вырезать текст от "<table" до "</table>" внутри которого есть строка "UNIQTEXT", но при этом не удалить лишнего. В результате должно получиться:

Код:
 
<table border=0>
<tr>
   <td>blablablabla</td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 23:26 17-05-2005 | Исправлено: AZJIO, 04:05 09-12-2014
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо. Но у меня не получилось.
Надо чтобы начало каждого массива начиналось с маленькой буквы. Каждый массив соответствует одному предложению. Мне надо начало предложения привести к нижнему регистру, в то время, как слова с заглавной буквы которые находятся внутри предложения оставить в верхнем регистре.
 
Сейчас вид такой:  
 

Код:
<?php
$string = 'ЗАВТРАК у тов. В.М.МОЛОТОВА
        ПО СЛУЧАЮ ПЯТНАДЦАТИЛЕТИЯ СОВЕТСКО-ТУРЕЦКОГО ДОГОВОРА
        В связи с исполнившимся 15-летием первого советско-турецкого договора о дружбе, 23 марта с. г. председатель Совета народных комиссаров Союза ССР тов. В.М.Молотов дал завтрак чрезвычайному и полномочному послу Турецкой республики - г-ну Зекяи Апайдын.
        На завтраке присутствовали товарищи: К.Е.Ворошилов, Ворошилов К. Е., Ворошилов К. Е., К. Е. Ворошилов, Л.М.Каганович, Г.К.Орджоникидзе, А.И.Микоян, В.И.Меж-Лаук, Н.К.Антипов, А.П.Розеигольп, Н.Н.Крестинский, А.С.Бубнов, Ю.Л.Пятаков, Б.С.Стомоняков, А.И.Егоров, С.М.Буденный, А.М.Могильный, а также ответственные сотрудники Народного комиссариата по иностранным делам и высшие чины турецкого посольства. Во время завтрака тов. В.М.Молотов и г-н Зекяи Апайдын обменялись приветственными речами.';
 
$string = preg_replace('/\s[А-ЯЁ-яё]\./u', ' ', $string);
$string = preg_replace('/\s[А-ЯЁ-яё]\./u', '', $string);
$keywords = preg_split('#(?<=(\.|\!|\?))\s#s', $string);
print_r($keywords);
?>

Как можно первую букву каждого массива привести к нижнему регистру?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 21:31 19-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
ну.. для начала определитесь с предложениями.

Цитата:
ЗАВТРАК у тов. В.М.МОЛОТОВА  
        ПО СЛУЧАЮ ПЯТНАДЦАТИЛЕТИЯ СОВЕТСКО-ТУРЕЦКОГО ДОГОВОРА  

как понять, что это предложение?  
иначе - разбить по точкам (учитывая, к примеру, длину слов перед ними, чтобы не захватить инициалы), а потом уже можно отдельно перебирать и сделать что хочется.
 
но проблема, к примеру, с "тов." - считать это окончанием предложения, не проводя лексический анализ, или нет?  
 
можно сделать, к примеру, так (разбивает на предложения по точкам, если перед ними больше 3 букв)

Код:
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\./u', $string, 0, PREG_SPLIT_NO_EMPTY);
foreach($sentences as &$s)
{
  $s = trim($s);
  $s = mb_strtolower(mb_substr($s, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($s, 1, mb_strlen($s), 'UTF-8');
}
var_dump($sentences);

результат

Цитата:
array(3) {
  [0]=>
  string(620) "зАВТРАК у тов. В.М.МОЛОТОВА
        ПО СЛУЧАЮ ПЯТНАДЦАТИЛЕТИЯ СОВЕТСКО-ТУРЕЦКОГО ДОГОВОРА
        В связи с исполнившимся 15-летием первого советско-турецкого договора о дружбе, 23 марта с. г. председатель Совета народных комиссаров Союза ССР тов. В.М.Молотов дал завтрак чрезвычайному и полномочному послу Турецкой республики - г-ну Зекяи Апайдын"
  [1]=>
  string(625) "на завтраке присутствовали товарищи: К.Е.Ворошилов, Л.М.Каганович, Г.К.Орджоникидзе, А.И.Микоян, В.И.Меж-Лаук, Н.К.Антипов, А.П.Розеигольп, Н.Н.Крестинский, А.С.Бубнов, Ю.Л.Пятаков, Б.С.Стомоняков, А.И.Егоров, С.М.Буденный, А.М.Могильный, а также ответственные сотрудники Народного комиссариата по иностранным делам и высшие чины турецкого посольства"
  [2]=>
  &string(161) "во время завтрака тов. В.М.Молотов и г-н Зекяи Апайдын обменялись приветственными речами"
}

 
такое изврат с mb_strtolower потому, что lcfirst не очень хорошо работает с уникодом, разбираться не хотелось

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 00:33 20-04-2016 | Исправлено: Mavrikii, 00:58 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
можно сделать, к примеру, так (разбивает на предложения по точкам, если перед ними больше 3 букв)  

 
Спасибо вам, добрый человек. На основе вашего примера сделал все что нужно. Теперь все фамилии, имена собственные и инициалы удалены. Фамилии остались только набранные капсом, но эта небольшая погрешность, в сравнении с тем, какое количество не нужных слов удалено.
 
Вот что сейчас выходит:
 

Код:
 
array(3) { [0]=> string(509) "зАВТРАК у МОЛОТОВА ПО СЛУЧАЮ ПЯТНАДЦАТИЛЕТИЯ СОВЕТСКО-ТУРЕЦКОГО ДОГОВОРА В связи с исполнившимся 15-летием первого советско-турецкого договора о дружбе, 23 марта председатель народных комиссаров ССР дал завтрак чрезвычайному и полномочному послу республики - г-ну" [1]=> string(295) "завтраке присутствовали товарищи: , , , , , , , - , , , , , , , , , , а также ответственные сотрудники комиссариата по иностранным делам и высшие чины турецкого посольства" [2]=> &string(104) "время завтрака и г-н обменялись приветственными речами" }
 

 
Вот только следующий шаг, это поиск в базе соответствий и подсчет слов, которые в базе не найдены. Тут будут путаться array(3) { [0]=> string(509) [1]=> string(295) [2]=> &string(104) и т.д. Подскажите пожалуйста, как от них избавиться, чтобы они не попадали в подсчет и сравнение слов?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 09:04 20-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
Подскажите пожалуйста, как от них избавиться, чтобы они не попадали в подсчет и сравнение слов?

они и не должны путаться или попадаться.
var_dump используется для показа типа переменной и ее значения, а не для вывода. так проще показать содержимое массива, а уж как на самом деле хотите вывести и куда - от вас зависит.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 09:10 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
они и не должны путаться или попадаться.  
var_dump используется для показа типа переменной и ее значения, а не для вывода. так проще показать содержимое массива, а уж как на самом деле хотите вывести и куда - от вас зависит.  

Вывожу так, но выводит только слово Array

Код:
echo $sentences;

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 10:34 20-04-2016
Vitus_Bering



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вывожу так, но выводит только слово Array

Массив в строку implode(...

Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 14:42 20-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
Вывожу так, но выводит только слово Array  

зачем вы выбрали язык, у которого не знаете даже основы?  
 
echo implode('. ', $sentences);
если нужно соединить обратно с точкой. если не нужно - точку убрать.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 19:24 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
зачем вы выбрали язык, у которого не знаете даже основы?

Да я не выбирал. Это он сам. )) Вообще стараюсь учиться, но я пока в самом начале пути.
 
Сейчас все предложения сваливаются в один абзац. Хоть и вывожу через nl2br:  
 

Код:
echo nl2br(implode('. ', $sentences));

 
Но видимо, когда мы делили предложения по точкам, все собрали в одну строку и теперь получается один абзац.
 
Как можно вернуть абзацы, подскажите пожалуйста.

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 21:06 20-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
Как можно вернуть абзацы, подскажите пожалуйста.

trim уберите
правда без него, скорее всего, не будет опускаться первая буква )

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 21:11 20-04-2016 | Исправлено: Mavrikii, 21:20 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Трим убрал. Появился один <br>. А всего строк (абзацев) должно быть 7. Как их вернуть, помогите пожалуйста.

Код:
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ]+\b/u', ' ' , $string);       // для: В.М.МОЛОТОВА
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ][а-яё]+\-[А-ЯЁ][а-яё]+\b/u', ' ' , $string);       // для: В.И.Меж-Лаук
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[-А-ЯЁ][-а-яё]+\b/u', ' ' , $string);        // для: В.М.Молотов
$string = preg_replace('/[А-ЯЁ][а-яё]+\s+[А-ЯЁ]\.\s*[А-ЯЁ]\.\,*/u', ' ' , $string);         // для: Ворошилов К. Е. Ворошилов К.Е.
$string = preg_replace('/[A-Z]+\b/u', ' ' , $string);
 
$string = preg_replace('/\s[А-ЯЁа-яё]\./u', ' ', $string);
$string = preg_replace('/\s[А-ЯЁа-яё]\./u', ' ', $string);
$string = preg_replace('/\s[А-ЯЁа-яё]{2,3}\./u', ' ', $string);
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\./u', $string, 0, PREG_SPLIT_NO_EMPTY);
foreach($sentences as &$s)
{
  // $s = trim($s);
  $s = mb_strtolower(mb_substr($s, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($s, 1, mb_strlen($s), 'UTF-8');
}
$sentences = preg_replace('/\s*[А-ЯЁA-Z][а-яёa-z]+/u', ' ', $sentences);
echo nl2br(implode('. ', $sentences));

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 21:21 20-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
ну сами, сами.. хоть чуть чуть

Код:
foreach($sentences as &$s)
  $s = preg_replace('/^\s+(\w)/ue', "mb_strtolower('$1', 'UTF-8')", $s);
 

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 21:27 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ну сами, сами.. хоть чуть чуть  

Честное слово, хочется вас порадовать, но пока не могу ))
Это тоже не помогает. Нашел в сети array array_map() это может помочь?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 21:51 20-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
Это тоже не помогает. Нашел в сети array array_map() это может помочь?

нет..  
что именно не помогает? у меня отображает так, как было изначально, с нужными изменениями.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 21:56 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так правильно?

Код:
foreach($sentences as &$s)
$s = preg_replace('/^\s+(\w)/ue', "mb_strtolower('$1', 'UTF-8')", $s);
{
  $s = trim($s);
  $s = mb_strtolower(mb_substr($s, 0, 1, 'UTF-8'), 'UTF-8') . mb_substr($s, 1, mb_strlen($s), 'UTF-8');
}
$sentences = preg_replace('/\s*[А-ЯЁA-Z][а-яёa-z]+/u', ' ', $sentences);
echo implode('. ', $sentences);

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 22:23 20-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
Так правильно?  

нет. изучите основы языка.
{
}
показывает блок, который выполняется в цикле foreach. я написал кусок, который заменяет его (и начало цикла) полностью

Код:
 
foreach($sentences as &$s)  
$s = preg_replace('/^\s+(\w)/ue', "mb_strtolower('$1', 'UTF-8')", $s);  
echo implode('. ', $sentences);

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 22:27 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет. В скобки я ставил тоже. И заменял. Вы правы, основ языка не знаю, но в скобки ставил и заменял и местами менял. Все равно не выходит.

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 22:31 20-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount
что именно не выходит?  

Код:
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\./u', $string, 0, PREG_SPLIT_NO_EMPTY);
foreach($sentences as &$s)
  $s = preg_replace('/^\s+(\w)/ue', "mb_strtolower('$1', 'UTF-8')", $s);
echo implode('. ', $sentences);

выдает

Код:
ЗАВТРАК у тов. В.М.МОЛОТОВА
        ПО СЛУЧАЮ ПЯТНАДЦАТИЛЕТИЯ СОВЕТСКО-ТУРЕЦКОГО ДОГОВОРА
        В связи с исполнившимся 15-летием первого советско-турецкого договора о дружбе, 23 марта с. г. председатель Совета народных комиссаров Союза ССР тов. В.М.Молотов дал завтрак чрезвычайному и полномочному послу Турецкой республики - г-ну Зекяи Апайдын. на завтраке присутствовали товарищи: К.Е.Ворошилов, Л.М.Каганович, Г.К.Орджоникидзе, А.И.Микоян, В.И.Меж-Лаук, Н.К.Антипов, А.П.Розеигольп, Н.Н.Крестинский, А.С.Бубнов, Ю.Л.Пятаков, Б.С.Стомоняков, А.И.Егоров, С.М.Буденный, А.М.Могильный, а также ответственные сотрудники Народного комиссариата по иностранным делам и высшие чины турецкого посольства. во время завтрака тов. В.М.Молотов и г-н Зекяи Апайдын обменялись приветственными речами

 
Что не так?
Если вы выводите и смотрите в виде html, то конечно будет не так - в html куча пробелов объединяются в один.
Хотите выводить с сохранением форматирования текста в случае html?
echo '<pre>' . implode('. ', $sentences) . '</pre>';
 
Либо скажите браузеру, что выдаете текст.. добавив  
header('Content-Type: text/plain; charset=utf-8');

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 22:33 20-04-2016 | Исправлено: Mavrikii, 22:36 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня с этим текстом не выходит.

Код:
 
<?php
$string = 'Ровный золотистый свет луны заливал высокий дом, стоящий на сваях, как на ходулях, освещал ребятишек и взрослых, сидящих на высоком помосте — открытом крыльце — вокруг старого Тхыонга, деда-сказочника. Невдалеке сквозь тропическую ночь скорее угадывались, чем виднелись силуэты невысоких, сгорбленных, как черепахи, вьетнамских гор. Размеренно и напевно лилась речь — дед рассказывал сказки.
В них, как и в сказках всех народов мира, жила дерзновенная мечта человека о счастье, о чудесных предметах и чудесах: ковре-самолете и тысячемильных туфлях, о дворцах, возникающих по волшебству, и о необыкновенных, огромных рисовых зернах.
Сказка — удивительное творение человеческого гения, она возвышает человека, радует его, дает веру в свои силы, в будущее, увлекает достижимостью того, что кажется вроде бы совершенно невозможным...
Наутро я прощался с дедом Тхыонгом, и еще долго слышались мне мелодичные и величавые звуки гонга, доносившиеся из его дома, где собрались люди по случаю отъезда советско-вьетнамской экспедиции фольклористов.
Конечно, сказки слушали и слушают и в русских избах, и в африканских хижинах, крытых пальмовыми листьями. Словом, всюду. Но теперь, чтобы познакомиться со сказками почти любого народа мира, не обязательно слушать сказочника, достаточно протянуть руку к полке с книгами: ныне эти сказки переведены на многие языки, стали осознанно важным явлением мировой культуры, без которого она оказалась бы далеко не полной, а детство каждого из нас — лишенным чего-то важного.
Но так было далеко не всегда, и Пушкин в 1824 году в своем письме из ссылки — села Михайловского — сетовал и восхищался: «Вечером слушаю сказки — и вознаграждаю тем недостатки проклятого своего воспитания. Что за прелесть эти сказки! Каждая есть поэма!»
Разумеется, что сказки, оказавшись зафиксированными в книге, вышедшей многотысячным тиражом, сохранятся для грядущих поколений. Их прочтут и те, кто никогда в жизни не увидит сказочника или сказочницу. Но, не будучи свидетелями мастерского исполнения таких сказочников, как дед Тхыонг, мы многое потеряем. Ведь дед и напевно декламировал, и подражал гомону птиц, рокоту горных потоков, рычанию тигров и трубным звукам слонов. Он имитировал шум джунглей, крик обезьян, звон ручья. Словом, это был своеобразный театр одного актера, тем более что сказочник дополнял выразительность своего выступления еще и жестом. О том, сколь важную роль в жизни людей играло устное творчество, говорит тот факт, что в пантеоны местных культов разных народов входили боги или духи — покровители певцов, сказителей и сказочников.';
 
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ]+\b/u', ' ' , $string);       // для: В.М.МОЛОТОВА
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ][а-яё]+\-[А-ЯЁ][а-яё]+\b/u', ' ' , $string);       // для: В.И.Меж-Лаук
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[-А-ЯЁ][-а-яё]+\b/u', ' ' , $string);        // для: В.М.Молотов
$string = preg_replace('/[А-ЯЁ][а-яё]+\s+[А-ЯЁ]\.\s*[А-ЯЁ]\.\,*/u', ' ' , $string);         // для: Ворошилов К. Е. Ворошилов К.Е.
$string = preg_replace('/[A-Z]+\b/u', ' ' , $string);
 
$string = preg_replace('/\s[А-ЯЁа-яё]\./u', ' ', $string);
$string = preg_replace('/\s[А-ЯЁа-яё]\./u', ' ', $string);
$string = preg_replace('/\s[А-ЯЁа-яё]{2,3}\./u', ' ', $string);
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\./u', $string, 0, PREG_SPLIT_NO_EMPTY);
foreach($sentences as &$s)
  $s = preg_replace('/^\s+(\w)/ue', "mb_strtolower('$1', 'UTF-8')", $s);
    $sentences = preg_replace('/\s*[А-ЯЁA-Z][а-яёa-z]+/u', ' ', $sentences);
echo implode('. ', $sentences);
?>
 

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 22:34 20-04-2016 | Исправлено: erroraccount, 22:38 20-04-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
erroraccount

Цитата:
У меня с этим текстом не выходит.  

сложно с вами. не выходит что? укажите какой результат ожидается, так как у вас тут нет имен с инициалами и тд и тп.

Всего записей: 15038 | Зарегистр. 20-09-2014 | Отправлено: 22:41 20-04-2016
erroraccount

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, простите. Сам понимаю, что сложно со мной, но большое спасибо что возитесь ))
 
Если закинуть текст из нескольких абзацев, то после обработки они сливаются и текст идет в одну строку.
А надо, чтобы после обработки текст выводился абзацами.
 
Вот тут я вывел первый блок, как сейчас с обработкой, а второй блок без обработки, но абзацы сохранены.
 

Код:
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Document</title>
</head>
<body>
 
 
<?php
$string = 'Ровный золотистый свет луны заливал высокий дом, стоящий на сваях, как на ходулях, освещал ребятишек и взрослых, сидящих на высоком помосте.
В них, как и в сказках всех народов мира.
Сказка — удивительное творение человеческого гения...
Наутро я прощался с дедом Тхыонгом, и еще долго слышались.
Конечно, сказки слушали и слушают и в русских избах.
Но так было далеко не всегда, и Пушкин в 1824 году.
Разумеется, что сказки, оказавшись зафиксированными в книге.';
 
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ]+\b/u', ' ' , $string); // для: В.М.МОЛОТОВА
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[А-ЯЁ][а-яё]+\-[А-ЯЁ][а-яё]+\b/u', ' ' , $string); // для: В.И.Меж-Лаук
$string = preg_replace('/[А-ЯЁ]\.\s*[А-ЯЁ]\.\s*[-А-ЯЁ][-а-яё]+\b/u', ' ' , $string); // для: В.М.Молотов
$string = preg_replace('/[А-ЯЁ][а-яё]+\s+[А-ЯЁ]\.\s*[А-ЯЁ]\.\,*/u', ' ' , $string); // для: Ворошилов К. Е. Ворошилов К.Е.
$string = preg_replace('/[A-Z]+\b/u', ' ' , $string);
 
$string = preg_replace('/\s[А-ЯЁа-яё]\./u', ' ', $string);
$string = preg_replace('/\s[А-ЯЁа-яё]\./u', ' ', $string);
$string = preg_replace('/\s[А-ЯЁа-яё]{2,3}\./u', ' ', $string);
$sentences = preg_split('/(?<!\b\w)(?<!\b\w\w)(?<!\b\w\w\w)\./u', $string, 0, PREG_SPLIT_NO_EMPTY);
foreach($sentences as &$s)
  $s = preg_replace('/^\s+(\w)/ue', "mb_strtolower('$1', 'UTF-8')", $s);
$sentences = preg_replace('/\s*[А-ЯЁA-Z][а-яёa-z]+/u', ' ', $sentences);
 
echo implode('. ', $sentences);
?>
<br><br><br>
<?php echo nl2br($string); ?>
</body>
</html>
 

 
Что получаем:

 
Надо чтобы абзацы были как во втором блоке, а обработка как в первом. Как это сделать?

Всего записей: 66 | Зарегистр. 01-02-2016 | Отправлено: 23:15 20-04-2016 | Исправлено: erroraccount, 23:25 20-04-2016
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru