如果格式不正确,preg_match_all会抓取HTML标记中的所有内容

时间:2014-11-07 06:20:40

标签: regex preg-replace preg-match

我正在尝试自动抓取html字符串中特殊标记中的所有内容。

我需要做的是抓住

中的所有内容
<font size="8"></font>

所以我写了以下preg_match_all

preg_match_all('/<font(.*?)size="8"(.*?)>(.*?)<\/font\>/s', $row['html'], $titles,PREG_PATTERN_ORDER);

但是它仅适用于某些情况,例如以下字符串(Mal格式)无法匹配。你有任何想法如何解决这个问题或修改上述preg与此

<font FACE="Times New Roman" SIZE="8"> 
                        <p><font color="#003300">adadas <br>
                        dfsf sdfsdf  <font size="4"><br>
                        <br>
                        gdfgdg 
</font>
</font>

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

<?php

$titles = array(); // CREATE AN ARRAY

$string = '<font FACE="Times New Roman" SIZE="8"><p><font color="#003300">adadas <br>dfsf sdfsdf  <font size="4"><br><br>gdfgdg</font></font>';


$dom_document = new DOMDocument(); // CREATE A NEW DOCUMENT
$dom_document->loadHTML($string); // LOAD THE STRING INTO THE DOCUMENT


// LOOP THROUGH EACH font TAG
foreach ($dom_document->getElementsByTagName('font') as $font_item) {

    // CHECK TO SEE IF IT HAS A SIZE ATTRIBUTE OF 8
    if ($font_item->getAttribute('size') == 8) {
        $titles[] = $font_item->ownerDocument->saveXML($font_item); 
    }

}


print_r($titles);

基本上,您可以使用PHP的内置DOM Parser,而不是使用REGEX。此脚本的作用是创建一个名为$dom_document的新文档,并将其加载到其中。然后,它遍历它找到的任何font标记,并检查它们中是否有任何属性为size="8"。如果找到任何内容,它会抓取HTML并将其存储到$titles数组中。