REGEX (. *) И перевод строки - PullRequest
1 голос
/ 20 марта 2010

Как я могу это исправить?

REGEX:
//REGEX
$match_expression = '/Rt..tt<\/td> <td>(.*)<\/td>/';
preg_match($match_expression,$text,$matches1);
$final =  $matches1[1];       


//THIS IS WORKING
<tr> <td class="rowhead vtop">Rtštt</td> <td><img border=0 src="http://somephoto"><br /> <br />INFO INFO INFO</td>
</tr> 


//THIS IS NOT WORKING
<tr> <td class="rowhead vtop">Rtštt</td> <td> <br />
IFNO<br />
INFO<br /></td></tr>

Ответы [ 3 ]

5 голосов
/ 20 марта 2010

И именно поэтому вам не следует использовать регулярные выражения для извлечения данных из документа HTML.

Структура разметки настолько произвольна, что просто слишком ненадежна, именно поэтому я не буду давать вам правильное регулярное выражение для использования, потому что его нет (решения, данные другими пользователями, могут работать ... до перерыв). Используйте DOM Parser, например DOMDocument или phpQuery , чтобы извлечь данные из вашего документа.

Вот пример использования phpQuery :

$pq = phpQuery::newDocumentFile('somefile.html');
$rows = $pq->find('td.rowhead.vtop:parent');

$matches = array();

foreach($rows as $row) {
  $matches[] = $row->eq(1)->html();
}
3 голосов
/ 20 марта 2010

Вы делаете это неправильно!

Сказав это, решение вашего вопроса:

/Rt..tt<\/td> <td>(.*)<\/td>/

должно быть

/Rt..tt<\/td> <td>(.*)<\/td>/s

см. http://php.net/manual/en/reference.pcre.pattern.modifiers.php

0 голосов
/ 21 марта 2010
$s = explode('</tr>',$str);
foreach($s as $v){
 $m=strpos($v,"img border");
 if($m!==FALSE){
    print substr($v,$m);
 }
}
...