REGEX(。*)和换行符

时间:2010-03-20 17:26:51

标签: php regex newline

我该如何解决这个问题?

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 个答案:

答案 0 :(得分:5)

这正是您不应该使用正则表达式从HTML文档中提取数据的原因。

标记结构是如此随意,以至于它太不可靠了,这正是为什么我不会给你一个正确的正则表达式来使用,因为没有(其他用户提供的解决方案可能有效......直到他们打破)。使用像DOMDocumentphpQuery这样的DOM解析器从文档中提取数据。

以下是使用phpQuery的示例:

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

$matches = array();

foreach($rows as $row) {
  $matches[] = $row->eq(1)->html();
}

答案 1 :(得分:3)

You're doing it wrong!

话虽如此,您问题的解决方案是:

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

应该是

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

请参阅http://php.net/manual/en/reference.pcre.pattern.modifiers.php

答案 2 :(得分:0)

$s = explode('</tr>',$str);
foreach($s as $v){
 $m=strpos($v,"img border");
 if($m!==FALSE){
    print substr($v,$m);
 }
}