2012-05-19 3 views
1

Это код, который работает локально.preg_match, только работает локально

$str = <<<SSS 
    <H1 class="prodname">Alison Raffaele Reality Base</H1>Foundation, Skintone 1 - Fairest&nbsp;1 fl oz (30 m)<p class="tip"><table id="TblProdForkSellCopy" width="100%" border="0"><tr><td class="contenttd"><p>Get full, flawless coverage with this luxurious oil-free formula. Continually refreshes and re-hydrates your skin for 12+ hours - and guards against premature aging by deflecting damaging free radicals. </p></td></tr></table><p></p> 
SSS; 

preg_match("~</[hH]1>(.+?)<p~",$str,$name) ; 
var_dump($name) ; 

Но не работает, когда страница фактически анализируется. Зачем ? Ссылка на page. Что-то не так с моим кодом. У меня есть копия, вставленная точно со страницы. О, и не работает, я имею в виду, что это слишком много. При локальном совпадении первый '<p' не включен, но по моему фактическому сценарию (когда страница загружается из сети) по какой-то причине она включает в себя тег '<p'.

Благодаря

+1

«Но не работает, когда страница фактически анализируется» <, что вы точно подразумеваете под этим? проанализирован? – yankee

+0

Я имею в виду, когда пытаюсь разобрать его с помощью регулярного выражения. fetch page with curl> make simple html dom doc> проанализировать его с помощью регулярного выражения. –

+0

Пожалуйста, воздержитесь от разбора HTML с помощью RegEx, поскольку он [сведёт вас с ума] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454). Вместо этого используйте [HTML-парсер] (http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php). –

ответ

2

Попробуйте это:

/<h1[^>]*>([^<]+)/i 

Это не работает, потому что вы закрываете тег, игнорируя HTML атрибутов тегов. См. [^>]*, он будет соответствовать всем ранее (атрибутам) >, так как class="prodname" часть вашего примера. Флаг i. не будет различать случай. Может соответствовать h и H.

Смежные вопросы