function except($string){
$str="";
$string = trim(preg_replace("~<[^<>]*>~Usi","",$string));
$string = explode(".", $string);
$string[0] ? $str .= $string[0].'.' : NULL;
$string[1] ? $str .= $string[1].'.' : NULL;
$string[2] ? $str .= $string[2].'.' : NULL;
return $str;
}
Она конечно не блещет кошерностью, но выполняла свою главную функцию - вырезала из куска хтмл первые 3 предложения чистого текста. Но сейчас возникла проблема, кроме <> тегов появились еще и [] теги =) И хотелось бы чтобы и все что внутри них и они сами тоже вырезались. Собственно как нужно изменить регулярку под этот случай?
Спустя 47 минут, 34 секунды (31.08.2010 - 20:08) waldicom написал(а):
$string[0] ? $str .= $string[0].'.' : NULL;
$string[1] ? $str .= $string[1].'.' : NULL;
$string[2] ? $str .= $string[2].'.' : NULL;
Вот эта мощный кусок кода... Он зачем?
Спустя 2 минуты, 20 секунд (31.08.2010 - 20:10) [MI_nor] написал(а):
Делим текст на куски, разделяемые точкой, и первые 3 куска берем если они есть =)
Спустя 14 часов, 46 минут, 9 секунд (1.09.2010 - 10:56) DedMorozzz написал(а):
Кривоватое решение...
Держи нормальное:
Держи нормальное:
$a='<test 1. test 2. test 3. test4. test5. test6. test7. >';
$a=preg_replace('#(<|\[)(?:.*?\.){3}(.*?)(>|\])#','$1$2$3',$a);
echo $a;//< test4. test5. test6. test7. >
Спустя 5 дней, 10 часов, 17 минут, 38 секунд (6.09.2010 - 21:14) [MI_nor] написал(а):
Эм, извиняюсь, может я не правильно выразил свою мысль. Нужно из текста оставить только первые 3 предложения чистого текста. Вырезать нужно все теги хтмл и бб. Например текст
после вырезания всего ненужного должно остаться только "С 2 по 17 октября пройдет Парижский автосалон на котором крупнейшие мировые автопроизводители представят свои новинки."
Т.е то что внутри <></> мы оставляем а то что внутри [][/] все начисто стираем
[caption id="" align="alignleft" width="360" caption="Гибридный мотор будет встроен в новую Honda Jazz."]<a href="/upload/file/honda_jazz.jpg"><img src="/upload/file/honda_jazz.jpg" alt="Гибридный мотор будет встроен в новую Honda Jazz." width="360" height="270" /></a>[/caption]
<strong>С 2 по 17 октября пройдет Парижский автосалон на котором крупнейшие мировые автопроизводители представят свои новинки.</strong>
после вырезания всего ненужного должно остаться только "С 2 по 17 октября пройдет Парижский автосалон на котором крупнейшие мировые автопроизводители представят свои новинки."
Т.е то что внутри <></> мы оставляем а то что внутри [][/] все начисто стираем
Спустя 7 дней, 23 часа, 28 минут, 44 секунды (14.09.2010 - 20:43) Плеханов Дмитрий написал(а):
Можно упростить задачу предварительно очистив от [][/]
preg_replace('/\[caption.*?\[\/caption\]/si', '', $string)
Спустя 14 часов, 5 минут, 23 секунды (15.09.2010 - 10:48) DedMorozzz написал(а):
мда. Я написал регулярку. Там надо будет изменить 2(!) символа. И готовое решение.
Спустя 18 минут, 17 секунд (15.09.2010 - 11:06) twin написал(а):
Предложение, это не то, что заканчивается точкой кстати. Точкой заканчиваются так же сокращения, которые могут находиться внутри него.
Цитата |
Адрес: д. 2 кв. 50 |
Спустя 15 минут, 54 секунды (15.09.2010 - 11:22) DedMorozzz написал(а):
Не уверен, точнее уверен, что не нужно рассматривать сверх сложную проверку.
Но если "а вот может" - то пожалуйста. Добавить проверку последнего символа, перед точкой. Он должен быть или цифрой или буквой. Далее следующего после точки. Это должен быть пробел и/или перевод строки или перевод строки и каретки а далее символ с большой буквы или цифра.
Даже в таком случае есть вариант ошибки. Если же надо ещё сложнее - тогда сокращения идут(в абсолютном большинстве) на глухие. И сокращения, сами по себе достаточно краткие, на то они и сокращения. Итого смотреть кол-во символов и если 3(я бы взял именно столько) и заканчивается на глухую согласную - тогда это не конец предложения. Ах да. и буква должна быть маленькой, если это сокращение. Иначе - аббревиатура и это конец предложения.
twin, думаешь именно это хотели услышать?!
Но если "а вот может" - то пожалуйста. Добавить проверку последнего символа, перед точкой. Он должен быть или цифрой или буквой. Далее следующего после точки. Это должен быть пробел и/или перевод строки или перевод строки и каретки а далее символ с большой буквы или цифра.
Даже в таком случае есть вариант ошибки. Если же надо ещё сложнее - тогда сокращения идут(в абсолютном большинстве) на глухие. И сокращения, сами по себе достаточно краткие, на то они и сокращения. Итого смотреть кол-во символов и если 3(я бы взял именно столько) и заканчивается на глухую согласную - тогда это не конец предложения. Ах да. и буква должна быть маленькой, если это сокращение. Иначе - аббревиатура и это конец предложения.
twin, думаешь именно это хотели услышать?!
Спустя 3 часа, 17 минут, 30 секунд (15.09.2010 - 14:40) twin написал(а):
Я прсто предупредил. А как делить - решать автору.