我有这个HTML代码:
<marquee align="left" id="LatestNewsM" SCROLLAMOUNT="4" loop="infinite" direction="right">
<font dir="rtl" valign="top" class="StringTheme" style="font-size:14px;">test test test</font>
<img src="/Portal/images/LightVersionWeb2/jazeeraTicSep.gif" align="middle">
<font dir="rtl" valign="top" class="StringTheme" style="font-size:14px;">test sample text sample</font>
<img src="/Portal/images/LightVersionWeb2/jazeeraTicSep.gif" align="middle">
<font dir="rtl" valign="top" class="StringTheme" style="font-size:14px;">text text 222 another text</font>
<img src="/Portal/images/LightVersionWeb2/jazeeraTicSep.gif" align="middle">
...........
.....
</marquee>
和这个PHP代码:
$homepage = file_get_contents('http://www.site.com');
如何搜索内容并仅获取字体标记<font>
答案 0 :(得分:1)
你有几个选项,ThiefMaster提到的一个选项是不使用“正则表达式”,使用strpos和substr或使用DOM / XML解析器。
如果你使用正则表达式,你最终可能会得到这样的结果:
/<font[^>]*>.*<\/font>/i
在这样的数据上运行时:
> Hello, this is my brutal <font>font
> <font>tag</font> right</font> it is
你最终会得到(如果贪婪)
<font>font <font>tag</font> right</font>
或者如果不合适
<font>font <font>tag</font>
你可以使用负向前看并做得更好,但它仍然不是一个好的解决方案(这个例子是为了告诉你为什么,正则表达式保持尽可能简单)
如果你使用strpos和substr,你必须逐个查看所有字符并自己解析文档(匹配开始和结束标记,跳过属性)或者你可以尝试
$opening = strpos($dataset, '<font', $closing) // closing is at offset zero
$closing = strpos($dataset, '</font', $opening) // start at opening tag
依此类推,直到你解析它为止。
如果您使用DOM / XML解析器,您可能需要考虑这一点,使用file_get_contents或file()将整个文件加载到内存中,就像大多数DOM / XML解析器一样,我会使用XMLReader(Streaming而不是加载整个文件)在内存中,解析它,构建树),它更有效。
P.S。在这里很晚(凌晨3点),请原谅任何拼写错误的单词。谢谢。 :)
答案 1 :(得分:0)
有用:
http://php.net/manual/en/function.strip-tags.php - 从文本中删除所有标记
http://php.net/manual/en/book.simplexml.php - 解析XML
如果HTML有效(目前没有 - 'img'标签未关闭),可以使用以下内容:
$xml = new SimpleXMLElement($data);
$fonts = $xml->xpath('/marquee/font');
foreach ($fonts as $font) print $font[0].PHP_EOL;