2012-02-12 4 views
0
<table class="trailer"> 

------------------Begin--------------------- 
<tbody><tr> 
<td class="newtrailer-text"> 
Trailer 2<br> 
</td></tr> 
<br> 
<b>(Yahoo)</b><br> 
<b>(High Definition)</b><br> 
<a href="http://playlist.yahoo.com/makeplaylist.dll?sid=107193280&amp;sdm=web&amp;pt=rd">(1080p)</a><br> 
<a href="http://playlist.yahoo.com/makeplaylist.dll?sid=107193279&amp;sdm=web&amp;pt=rd">(720p)</a><br> 
<a href="http://playlist.yahoo.com/makeplaylist.dll?sid=107193272&amp;sdm=web&amp;pt=rd">(480p)</a><br> 
<br> 
<b>(Warner Bros.)</b><br> 
<b>(High Definition)</b><br> 
<a href="http://pdl.warnerbros.com/wbmovies/inception/trl_3/Inception_TRLR3_1080.mov">(1080p)</a><br> 
<a href="http://pdl.warnerbros.com/wbmovies/inception/trl_3/Inception_TRLR3_720.mov">(720p)</a><br> 
<a href="http://pdl.warnerbros.com/wbmovies/inception/trl_3/Inception_TRLR3_480.mov">(480p)</a>= 
--------------END---------------- 

</tbody></table> 

Как я могу получить все данные между началом и концом? Я пробовал следующее без каких-либо результатов. Любая помощь будет оценена по достоинству. Благодарю.PHP Регулярные выражения на нескольких строках

$regex = '#<td class="newtrailer-text">([^"]+)</tbody></table>#si'; 
+1

Что именно вы пытаетесь достичь? Что вы хотите делать с данными? (Поскольку есть, вероятно, лучшие/более чистые способы достижения того же). – Oldskool

+3

Использование парсера dom не является регулярным выражением. –

ответ

2
$regex = '#<td class="newtrailer-text">(.+)</tbody></table>#Usi'; 
+1

Взаимный +1 для правильности. – rdlowrey

2

Вот the canonical link for why you should use DOM to parse (X)HTML: пони, он приходит.

Но вот дело с регулярным выражением:

([^"]+) будет соответствовать только все, вплоть до первого появления двойной цитатой ". В вашем регулярном выражении указано, что первая двойная кавычка должна произойти непосредственно перед тегом </tbody> или не будет найдена совпадение.

Вместо этого попробуйте:

$regex = '#<td class="newtrailer-text">(.+)</tbody></table>#siU'; 

if (preg_match($regex, $str, $m)) { 
    echo $m[1]; 
} else { 
    echo 'No match'; 
} 
+0

Спасибо, я загляну в DOM parser's – user1204679

+0

+1 за то, что вы быстрее объясните. Набрав беспроводную мини-клавиатуру перед моим телевизором, отстой ;-) – Kaii

+0

, но вы действительно должны сделать это регулярное выражение неровным с помощью модификатора U! – Kaii

1

Вы можете использовать не жадный RrgEx так:

if (preg_match_all('#------------------Begin---------------------(.*?)--------------END----------------#s', $str, $m)) 
    print_r ($m[1]); 
+0

+1 для хорошего чувства юмора – Kaii

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