|
|
|
| нужно вытащить со страницы данные
<h2 class="auto-model">
<a href="/****/used/toyota/bb/">текст</a>
| вытащить текст
.....
<p class="cost"><big><strong>текст какой то</strong></big>
| нужно вытащить
какой то текст
<ul class="sale-phones"><li><strong>какой то текст</strong>
| вытащить
какой то текст
<dt>Год вып:</dt>
<dd class=""><big><strong>какой то текст</strong>
| нужно вытащить | |
|
|
|
|
|
|
|
для: technic611
(31.01.2011 в 14:13)
| | Можно поступить следующи образом
<?php
$text = '<h2 class="auto-model">
<a href="/****/used/toyota/bb/">текст</a>';
$pattern = "|<h2[\s]+class=\"auto-model\">[\s]*<a[^>]+>(.*?)</a>|is";
preg_match($pattern, $text, $out);
echo $out[1];
$text = '<p class="cost"><big><strong>текст какой то</strong></big>';
$pattern = "|<p[\s]+class=\"cost\"><big><strong>(.*?)</strong></big>|is";
preg_match($pattern, $text, $out);
echo $out[1];
$text = '<ul class="sale-phones"><li><strong>какой то текст</strong>';
$pattern = "|<ul[\s]+class=\"sale-phones\"><li><strong>(.*?)</strong>|is";
preg_match($pattern, $text, $out);
echo $out[1];
$text = '<dt>Год вып:</dt>
<dd class=""><big><strong>какой то текст</strong>';
$pattern = "|<dt>[^<]+</dt>[\s]*<dd[^>]+><big><strong>(.*?)</strong>|is";
preg_match($pattern, $text, $out);
echo $out[1];
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(31.01.2011 в 14:39)
| | спасибо.
[\s]+ это обозначает пробел? | |
|
|
|
|
|
|
|
для: technic611
(31.01.2011 в 17:15)
| | Любой пробельный символ, включая переводы строк и табуляции, + означает что их может быть один или больше. | |
|
|
|
|
|
|
|
для: cheops
(31.01.2011 в 17:16)
| | Только не понятно зачем было \s заключать в []. Это и так класс, который ничем не расширяется. | |
|
|
|
|
|
|
|
для: SHAman
(01.02.2011 в 12:57)
| | Дурацкая привычка... | |
|
|
|
|
|
|
|
для: technic611
(31.01.2011 в 14:13)
| |
<?
$obr=<<< DEED
<h2 class="auto-model">
<a href="/****/used/toyota/bb/">текст</a>
вытащить текст
.....
<p class="cost"><big><strong>текст какой то</strong></big>
нужно вытащить
какой то текст
<ul class="sale-phones"><li><strong>какой то текст</strong>
вытащить
какой то текст
<dt>Год вып:</dt>
<dd class=""><big><strong>какой то текст</strong>
нужно вытащить
какой то текст
DEED;
preg_match_all("/(?:(?<=[^dt]>))([^<\/>].+?)(?:(?=<\/))/",$obr,$mat);
echo "<pre>";
print_r($mat[1]);
echo "</pre>";
/*
Array
(
[0] => текст
[1] => текст какой то
[2] => какой то текст
[3] => какой то текст
)
*/
?>
|
| |
|
|
|
|
|
|
|
для: technic611
(31.01.2011 в 14:13)
| | Я тут это... написал статью короче. Если что - может поможет и сможете сами писать в следующий раз что-то подобное. | |
|
|
|
|
|
|
|
для: SHAman
(09.02.2011 в 18:15)
| |
<?php
$bold=<<< DEED
<a href="/****/used/toyota/bb/" class="someclass">текст, который нам нужен с лишними пробелами в конце <b>а это нам уже не нужно</b></a>
DEED;
preg_match("/(?:(<a.+?[^>]+>))(.+?)\s*?(?:<)/",$bold,$match);
echo ">".$match[2]."<";
/*
>текст, который нам нужен с лишними пробелами в конце<
*/
?>
(Знаки ">" и "<" добавлены в начале и конце строки для наглядности отсутствия пробелов).
Спасибо Вам, SHAman, за популяризацию знаний и бескорыстную помощь начинающим!
Все мы когда-то читали подобные статьи с жадностью :)
А опыт приходит со временем.
|
| |
|
|
|
|
|
|
|
для: Deed
(09.02.2011 в 19:01)
| | На конкретном тексте ваша регулярка работает, но на реальном коде страницы - спотыкнется. Она выберет тексты ссылок. Всех.
Кстати, а зачем вы делаете кластеризацию без захвата? Я про (?:)
Пожалуйста:) | |
|
|
|