|
|
|
| Помогите распарсить вот такой блок:
<span id="infotext"><p>Планировочное решение этого дома основано на размещении всех необходимых помещений дома на разных уровнях. Это достигается за счет центрального расположения внутренней лестницы. Непосредственно при входе есть жилая комната, несколько ниже – вход в гараж и в блок с санузлом, душем и котельной. Здесь же предусмотрен хозяйственный выход на участок. На двух уровнях второго этажа находятся гостиная и кухня-столовая. На промежуточном уровне – спальня. В <span class="cont2"><s>мансардном<span><table width="100%"><tbody><tr><td valign="top">
<a href="http://www.homeplans.ru/practice/index.php?info=goods_window"><img src="http://www.homeplans.ru/img/articles/033668/tips.jpg" title="Окна на крыше" alt="Окна на крыше" width="60" height="60"></a></td>
<td><a href="http://www.homeplans.ru/practice/index.php?info=goods_window"><h2>Окна на крыше</h2><p>Какие «фокусы» не пройдут с традиционными вертикальными oкнами в вашей мансарде.</p>
<p style="color: green;" align="right">Подробнее >> </p></a></td></tr><tr><td colspan="2"><p style="margin: 5px 0px 0px 5px;">
<a href="http://www.velux.ru/?WT.mc_id=ru_solution&WT.mc_ad=sponsorlink&WT.mc_host=homeplans.ru" target="_blank">www.velux.ru</a></p></td></tr></tbody></table></span></s> </span>этаже находятся две спальни и хозяйственные помещения. В доме помимо камина есть печь, которая предназначена не только для обогрева, но и для приготовления пищи.</p></span>
Между тэгами <span id="infotext"></span> может быть любое количество тэгов... или совсем не быть.
Просто:
$pattern = '#<span id=\"infotext\">(.*)</span>#';
preg_match_all($pattern, $content, $matches);
Есс-но не получается.
Заранее всем, Спасибо! | |
|
|
|
|
|
|
|
для: SpiLLeR
(01.12.2008 в 21:52)
| | Непонятно что вы пытаетесь получить из текста,
если фрагмент до первого </span>, то измените (.*) на (.*?)
если хотите получить вместе с вложенными элементами, то придётся как-нибудь
применить рекурсию в шаблоне , например так
<?
$pattern = '#<span(?(1)[^>]*| id="infotext")(>)(?:(?>(?!</?span).[^<]*)+|(?R))*</span[^>]*>#s';
preg_match_all($pattern, $content, $matches);
print_r($matches);
?>
|
или предусмотреть ограниченно-вложенные элементы.
Но усложнение замедляет | |
|
|
|
|
|
|
|
для: xx77
(02.12.2008 в 13:46)
| | Я хочу получить текст между <span id="infotext"></span> необязательно даже с внутреними тегам, главное текст. | |
|
|
|
|
|
|
|
для: SpiLLeR
(03.12.2008 в 01:16)
| | Короче, не реально, сделать это правильно.
В вашем примере span`ов х...а туча, а также возможно в реальной странице еще больше и абсолютно не понятно от чего отталкиваться.
PS У этого сайта нет rss? Возможно от туда легче было бы взять информацию. | |
|
|
|
|
|
|
|
для: AcidTrash
(03.12.2008 в 21:22)
| | RSS есть, но там только последние 20 объектов.
Эти спаны внутри оказывается контекстная реклама и появляется редко.
Вот код не много больше, может так будет от чего оттолкнутся:
<td align="right"><p class="txt"><a href="#wplan">
<img src="http://www.homeplans.ru/img/icons/view.gif" alt="увеличить" width="21" align="top" border="0" height="21"></a> <a href="#wplan">Посмотреть планы</a></p></td></tr></tbody></table><span id="infotext"><p>Планировочное решение этого дома основано на размещении всех необходимых помещений дома на разных уровнях. Это достигается за счет центрального расположения внутренней лестницы. Непосредственно при входе есть жилая комната, несколько ниже – вход в гараж и в блок с санузлом, душем и котельной. Здесь же предусмотрен хозяйственный выход на участок. На двух уровнях второго этажа находятся гостиная и кухня-столовая. На промежуточном уровне – спальня. В мансардном этаже находятся две спальни и хозяйственные помещения. В доме помимо камина есть печь, которая предназначена не только для обогрева, но и для приготовления пищи.</p></span>
<div style="width: 475px;"> | |
|
|
|
|
|
|
|
для: SpiLLeR
(04.12.2008 в 13:21)
| | Добавить модификатор s, чтобы переносы строк тоже считались символами при использовании метасимвола точки.
$pattern = '#<span id=\"infotext\">(.*)</span>#s';
|
| |
|
|
|
|
|
|
|
для: SpiLLeR
(04.12.2008 в 13:21)
| |
'#<span id="infotext"><p>((?>(?!<span><table|</p>).[^<]*)*)(?:<span><table.+?</table></span>)?(.*?)</p></span>#s'
|
Можно сделать две подстроки совпадения , здесь первая до рекламы - жадная,
вторая ,нежадная, может быть пустой | |
|
|
|