Убрать из title не нужные части

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

Dador

Читатель
Заблокирован
Регистрация
14 Янв 2008
Сообщения
368
Реакции
100
  • Автор темы
  • Заблокирован
  • #1
Выдираю title из html вот так:
Код:
	preg_match('%<title.*?>(.*?)</title.*?>%sim', $text, $result);
(php) сам в RegExp - фигово, так вот, как сделать так чтобы если вот такое название:
Код:
Новости@Mail.Ru: Последствия взрыва газопровода в&nbsp;Москве
бралось только
Код:
Последствия взрыва газопровода в&nbsp;Москве
или при
Код:
Поддержка модулей расширения в DLE 7 и 8 &raquo; Всё для DLE, Datalife Engine, ДЛЕ. Модули, шаблоны, скины, хаки. PHP скрипты.
бралось только
Код:
Поддержка модулей расширения в DLE 7 и 8
или при
Код:
Название статьи - NameSite.com
- бралось только
Код:
Название статьи

Желательно универсально... можно и заменять их preg_replace, мне без разницы, но как получить само название, с учетом что может быть любое из этих вариантов, или может быть так что его вовсе не будет
 
Только данные 3 случая или еще какие-то могут быть?
 
  • Автор темы
  • Заблокирован
  • #3
вообще данные 3, но с любым тестом т.е. под
Код:
Новости@Mail.Ru: Последствия взрыва газопровода в&nbsp;Москве
должно подходить и
Код:
MySite.com: Новые обои в разделе Графика
 
в твоем случае проще всего забить массив таких фраз как
Новости@Mail.Ru:
- NameSite.com
&raquo; Всё для DLE, Datalife Engine, ДЛЕ. Модули, шаблоны, скины, хаки. PHP скрипты.

и вырезать все это из титла простым str_replace в цикле. К остатку trim и все довольны.

А если система самообучается, то есть выбирает, допустим список титлов и новостей, то можно тут же после выборки найти общую часть (правда реализация такого не очень простая) и в конце пробежатся по титлам и вырезать эту общую часть.
 
  • Автор темы
  • Заблокирован
  • #5
в твоем случае проще всего забить массив таких фраз как
Новости@Mail.Ru:
- NameSite.com
&raquo; Всё для DLE, Datalife Engine, ДЛЕ. Модули, шаблоны, скины, хаки. PHP скрипты.

и вырезать все это из титла простым str_replace в цикле. К остатку trim и все довольны.

А если система самообучается, то есть выбирает, допустим список титлов и новостей, то можно тут же после выборки найти общую часть (правда реализация такого не очень простая) и в конце пробежатся по титлам и вырезать эту общую часть.

нет простым стр_репалс, не пойдет, я знаю такой способ, дело в том что таких сайтов будет тысячи, и ручками со всех собрать никогда не получится, тут надо что то вроде preg_replace('Это удалить:любые символы', '$1', $text); где любые символы - это сам тайтл, а "Это удалить:" это удаляется путем замены всей фразы на аргумент $1 ("любые символы") вот как только под "Это удалить:", да "&raquo; это удалить", и "- это удалить" сделать регулярное выражение? т.е. чтобы подходило под любую фразу такого вида

(надеюсь объяснил понятно)
 
Такого регулярного выражения, чтобы подходил везде-везде написать невозможно.
Я вот писал парсилку дле-сайтов и там использововал именно самообучение, где парсю страницу и с нее новости выдираю полный текст и потом в конце имею 10ок титлов, выделяю из нее общую часть и чищу от нее. без всяких регулярок.
 
а может можно просто сделать так
[\w]
[a-zA-ZА-Яа-я-0-9]
по идее только буквы заберете.
брать через preg_match

В общем я чищу мусор для добавления ссылки чпу так
HTML:
 $cpu=  preg_replace("[\W]",'_',$cpu);
в место - оставить " " и все мусора не должно быть, его вырежет


старый вариант когда-то был у меня такой
HTML:
$te = array("'", "-", "+", "$", "@", "!","&nbsp;","№","#","%","^","'" ,'"' ,"," ,"-" ,"_" ,":","=", "." ,"/"  ,"\\" ,")" ,"("
  ,"|","*","<",">" ,",","?","~","&quot;","&8211;","»","«");
$cpu=str_replace($te, "", $cpu);
 
Код:
<title[^>]*>(?:[^<:]*:)?(?:([^<]*)(?:-|&raquo;)|([^<]*))

Добавлено через 20 минут
Невнимательно прочел, выбрать все до &raquo;, поправил.
 
  • Автор темы
  • Заблокирован
  • #9
Вот такая фигня Warning: preg_match() [function.preg-match]: Unknown modifier ']' in путь on line 3
ну на 3 строке естественно функция с регуляркой, пробую так:
Код:
preg_match('<title[^>]*>(?:[^<]*(?:&raquo;|:))?(?|([^<]*)-|([^<]*))', '<title>Lols xD</title>', $result);
 
ПХПшные символы-ограничители поставить.
Код:
preg_match('%<title[^>]*>(?:[^<]*(?:&raquo;|:))?(?|([^<]*)-|([^<]*))%i'
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху