我正在尝试自动抓取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>
答案 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
数组中。