0 / 0 / 0
Регистрация: 30.08.2013
Сообщений: 3
1

Вытянуть содержимое между тегов title

30.08.2013, 12:18. Показов 23232. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как с помощью регулярного выражение содержимое <title> </ title>, есть текст из него нужно вытинуть то что находиться между <title> </ title>, желательно с помощью рег. выраж preg_grep(). Помогите пожайлуста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2013, 12:18
Ответы с готовыми решениями:

вытянуть содержимое тегов <title> и вставить в meta name="description"
на сайте в свое время(при создании) проигнорировал тег &lt;meta name=&quot;description&quot;...&gt;, т.е. не...

сканер тегов title
Здравствуйте, есть .doc файл со списком сайтов (более 1000) есть ли возможность в автоматическом...

Как отключить в броузере синенькую полосочку, где выводится то что заключено между тегами <title> и </title>?
А как отключить в броузере синенькую полосочку, где выводится то что заключено между тегами &lt;title&gt;...

Парсинг тегов <title> расположенных в разных формах
есть страница на которой большое количество форм, и мне нужно пробежаться по каждой форме и...

11
296 / 284 / 84
Регистрация: 10.05.2013
Сообщений: 920
30.08.2013, 14:53 2
Вот так можно:
PHP
1
2
3
$text = '<title> something text was here... </title>';
if(preg_match("~<title>(.*)</title>~",$text,$preg))
    print_r($preg);
1
0 / 0 / 0
Регистрация: 30.08.2013
Сообщений: 3
30.08.2013, 17:25  [ТС] 3
Большое вам спасибо.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
30.08.2013, 17:59 4
добавьте сначала </title> куда-нибудь в конец html-кода... посмотрите, что получится. а потом добавьте знак вопроса в подмаску,вот так вот:
Код
~<title>(.*?)</title>~
0
296 / 284 / 84
Регистрация: 10.05.2013
Сообщений: 920
30.08.2013, 18:31 5
NEbO, если не указать ? тогда будет 1 вхождение, а если со ? тогда 0 или больше чем 1 вхождение?
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
30.08.2013, 18:37 6
Dealiss, попробуй сделать как я сказал добавь в конец хтмл кода еще один закрывающий тег </title>. для достоверности, можешь добавить еще и открывающий, и даже написать что-то между ними
знак вопроса в данном случае относится к квантификатору *, и играет совершенно другую роль...
0
296 / 284 / 84
Регистрация: 10.05.2013
Сообщений: 920
30.08.2013, 18:47 7
NEbO, \n - без ? учитываются, с ? не учитываются. Верно?
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
30.08.2013, 18:52 8
я конечно соглашусь с тем, что в ряде задач сойдет и ".*", просто внизу могут быть строковые литералы в js-е, комментарии, и прочая билиберда... поэтому как-то ".*?" подойдет гораздо чаще...
впрочем, можно добиться такого же поведения и без знака вопроса, а с помощью модификатора... ладно, сразу дам ответ, под спойлером. но лучше попробовать сделать самостоятельно, весьма неплохой пример, а эту тему как раз не очень хорошо понимают.
Кликните здесь для просмотра всего текста
дело в жадности (greedy) квантификатора. если квантификатор жадный, то дойдя до ".*", сопоставлятор прыгнет в конец и пойдет в начало до первого совпадения. так он захватит максимально возможную часть. т.к. он совпадет со всеми символами начиная от первого <title>, заканчивая последним </title>. Если же применить модификатор U (ungreedy), или (?U) засунуть в регулярку до ".*", а равно написать ".*?" (когда знак вопроса стоит после квантификатора, он инвертирует жадность), дойдя до ".*" он никуда прыгать не будет, а пойдет себе спокойно дальше -- пока не встретит первый попавшийся </title>


Добавлено через 2 минуты
Цитата Сообщение от Dealiss Посмотреть сообщение
\n - без ? учитываются, с ? не учитываются.
кстати да, если в тайтле может быть символ перевода строки, нужно применить модификатор s (вполне логичное сокращение от DOT_ALL, ага. и тем не менее, это именно оно)
1
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
31.08.2013, 15:25 9
Стопроцентный, но жутко затратный способ через DOM
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
    $URI = 'https://www.google.ru';
    $title = 'Not found';
    $DOM = new doMDocument();
 
    if(@$DOM -> loadHTMLFile($URI))
    {
        $Xpath = new doMXPath($DOM);
        $title = $DOM -> getElementsByTagName('title') -> item(0) -> nodeValue;
    }
    
    echo $title;
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
31.08.2013, 15:49 10
Цитата Сообщение от nubo Посмотреть сообщение
Стопроцентный
ну помимо того, что он жутко затратный, DOMDocument, если не ошибаюсь, парсит X(HT)?ML, а не HTML. и если где-то в боди будут списки аля
HTML5
1
2
3
4
<ul>
<li>...
<li>...
</ul>
(без закрывающих тегов), или атрибуты будут без кавычек (что также является валидным в html-е в некоторых случаях), итп приколы, то вам не выдернуть тайтл таким образом Разумеется, если предполагается какой-то серьезный парсинг всего документа, а не только тайтла у страницы, то да, несомненно следует пользоваться более подходящими вещами, и я не раз об этом уже упоминал в этом разделе. Но конкретно в задаче парсинга тайтла (который, кроме всего прочего, не может содержать вложенных элементов, если не ошибаюсь) применять DOMDocument -- все равно что избавляться от комаров с помощью танка
0
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
31.08.2013, 15:58 11
Секундочку. Читаем вопрос топикстартера:
есть текст из него нужно вытинуть то что находиться между <title> </title>
Я понимаю про танки, но все же это 100% решение. )))
Вобщем то это так, для общего развития. Понятно, что ни кто в здравом уме для парсинга это применять не будет.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
31.08.2013, 16:19 12
Цитата Сообщение от nubo Посмотреть сообщение
есть текст из него нужно вытинуть то что находиться между <title> </title>
если подходить к этому вопросу формально, то вы неправы в квадрате: кто вам вообще сказал, что там x?html документ? может это вообще какая-то бинарная последовательность, разделенная вот такими вот штуками типа тегов.
Цитата Сообщение от nubo Посмотреть сообщение
но все же это 100% решение.
еще раз говорю, что даже для html документа это не так регулярное выражение в этой задаче покрывает бОльшее множество классов входных данных, нежели КС-парсеры. x?html может быть вообще невалидным, например, но содержать <title> ... </title>, а задача о валидности тут не стояла.

вообщем, не вижу смысла продолжать этот спор, просто не непонятно, зачем после решения задачи предлагать худшее, не всегда работающее и утверждать, что оно чем-то лучше. какое-то искажение фактов, тем более что вы сами признались, что
Цитата Сообщение от nubo Посмотреть сообщение
Понятно, что ни кто в здравом уме для парсинга это применять не будет.

Не по теме:

лучше бы привели пример как подключить и использовать в пхп что-то новое и интересное. о DOMDocument-е то и так все знают, кому надо, а новичок запутается. а вот например, как использовать недавно вышедшую библиотеку https://github.com/google/gumbo-parser в пхп -- вот это было бы интересно:)

0
31.08.2013, 16:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2013, 16:19
Помогаю со студенческими работами здесь

Убрать содержимое title +
Возможно ли скриптами убрать содержимое тега title при выводе на печать? Страница печатается из...

Заменить содержимое тега title
Здравствуйте! Я использую регулярку: preg_match('|&lt;title.*?&gt;(.*)&lt;/title&gt;|sei', $html_code) ...

Спарсить содержимое тегов в xml
Всем доброго времени суток! Возникла потребность вытащить информацию заключенную в туги в файле xml...

Php вывести содержимое тегов <li></li>
Привет, нужно вывести содержимое тегов &lt;p&gt;&lt;/p&gt; из файла test.txt. Например, в фаиле test.txt текст...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru